<!DOCTYPE html><html><head>
      <title>passthrough_mode_desgin</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <link rel="stylesheet" href="file:////home/yuanbo/.vscode-server/extensions/shd101wyy.markdown-preview-enhanced-0.6.3/node_modules/@shd101wyy/mume/dependencies/katex/katex.min.css">
      
      
      
      
      
      
      
      
      
      <style>
      /**
 * prism.js Github theme based on GitHub's theme.
 * @author Sam Clarke
 */
code[class*="language-"],
pre[class*="language-"] {
  color: #333;
  background: none;
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  text-align: left;
  white-space: pre;
  word-spacing: normal;
  word-break: normal;
  word-wrap: normal;
  line-height: 1.4;

  -moz-tab-size: 8;
  -o-tab-size: 8;
  tab-size: 8;

  -webkit-hyphens: none;
  -moz-hyphens: none;
  -ms-hyphens: none;
  hyphens: none;
}

/* Code blocks */
pre[class*="language-"] {
  padding: .8em;
  overflow: auto;
  /* border: 1px solid #ddd; */
  border-radius: 3px;
  /* background: #fff; */
  background: #f5f5f5;
}

/* Inline code */
:not(pre) > code[class*="language-"] {
  padding: .1em;
  border-radius: .3em;
  white-space: normal;
  background: #f5f5f5;
}

.token.comment,
.token.blockquote {
  color: #969896;
}

.token.cdata {
  color: #183691;
}

.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
  color: #333;
}

.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
  color: #a71d5d;
}

.token.string,
.token.url,
.token.regex,
.token.attr-value {
  color: #183691;
}

.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
  color: #0086b3;
}

.token.tag,
.token.selector,
.token.prolog {
  color: #63a35c;
}

.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
  color: #795da3;
}

.token.entity {
  cursor: help;
}

.token.title,
.token.title .token.punctuation {
  font-weight: bold;
  color: #1d3e81;
}

.token.list {
  color: #ed6a43;
}

.token.inserted {
  background-color: #eaffea;
  color: #55a532;
}

.token.deleted {
  background-color: #ffecec;
  color: #bd2c00;
}

.token.bold {
  font-weight: bold;
}

.token.italic {
  font-style: italic;
}


/* JSON */
.language-json .token.property {
  color: #183691;
}

.language-markup .token.tag .token.punctuation {
  color: #333;
}

/* CSS */
code.language-css,
.language-css .token.function {
  color: #0086b3;
}

/* YAML */
.language-yaml .token.atrule {
  color: #63a35c;
}

code.language-yaml {
  color: #183691;
}

/* Ruby */
.language-ruby .token.function {
  color: #333;
}

/* Markdown */
.language-markdown .token.url {
  color: #795da3;
}

/* Makefile */
.language-makefile .token.symbol {
  color: #795da3;
}

.language-makefile .token.variable {
  color: #183691;
}

.language-makefile .token.builtin {
  color: #0086b3;
}

/* Bash */
.language-bash .token.keyword {
  color: #0086b3;
}

/* highlight */
pre[data-line] {
  position: relative;
  padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
  position: absolute;
  top: 0;
  left: 0;
  background-color: transparent;
  display: block;
  width: 100%;
}

pre[data-line] .line-highlight {
  position: absolute;
  left: 0;
  right: 0;
  padding: inherit 0;
  margin-top: 1em;
  background: hsla(24, 20%, 50%,.08);
  background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  pointer-events: none;
  line-height: inherit;
  white-space: pre;
}

pre[data-line] .line-highlight:before, 
pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-start);
  position: absolute;
  top: .4em;
  left: .6em;
  min-width: 1em;
  padding: 0 .5em;
  background-color: hsla(24, 20%, 50%,.4);
  color: hsl(24, 20%, 95%);
  font: bold 65%/1.5 sans-serif;
  text-align: center;
  vertical-align: .3em;
  border-radius: 999px;
  text-shadow: none;
  box-shadow: 0 1px white;
}

pre[data-line] .line-highlight[data-end]:after {
  content: attr(data-end);
  top: auto;
  bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% -  300px);padding:2em calc(50% - 457px -  150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      </style>
    </head>
    <body for="html-export">
      <div class="mume markdown-preview  ">
      <ul>
<li><a href="#%E7%9B%AE%E7%9A%84">&#x76EE;&#x7684;</a></li>
<li><a href="#cpp%E6%96%B9%E6%A1%88">CPP&#x65B9;&#x6848;</a>
<ul>
<li><a href="#ipc%E6%A8%A1%E5%BC%8F">IPC&#x6A21;&#x5F0F;</a></li>
<li><a href="#passthrough%E6%A8%A1%E5%BC%8F">Passthrough&#x6A21;&#x5F0F;</a>
<ul>
<li><a href="#%E7%9B%AE%E5%89%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98">&#x76EE;&#x524D;&#x5B58;&#x5728;&#x7684;&#x95EE;&#x9898;&#xFF1A;</a></li>
<li><a href="#%E4%B8%BB%E8%A6%81%E8%AE%BE%E8%AE%A1">&#x4E3B;&#x8981;&#x8BBE;&#x8BA1;</a>
<ul>
<li><a href="#%E5%AE%A2%E6%88%B7%E7%AB%AF">&#x5BA2;&#x6237;&#x7AEF;</a></li>
<li><a href="#%E6%9C%8D%E5%8A%A1%E7%AB%AF">&#x670D;&#x52A1;&#x7AEF;</a></li>
<li><a href="#passthrough">Passthrough</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="#c%E8%AF%AD%E8%A8%80%E6%96%B9%E6%A1%88">C&#x8BED;&#x8A00;&#x65B9;&#x6848;</a>
<ul>
<li><a href="#%E6%9C%8D%E5%8A%A1%E7%AB%AF-1">&#x670D;&#x52A1;&#x7AEF;</a></li>
</ul>
</li>
</ul>
<h1 class="mume-header" id="%E7%9B%AE%E7%9A%84">&#x76EE;&#x7684;</h1>

<p>&#x76EE;&#x524D;&#x57FA;&#x4E8E;IDL&#x7684;HDI&#x5B9E;&#x73B0;&#x5DE5;&#x4F5C;&#x5728;IPC&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x5BF9;&#x4E8E;&#x90E8;&#x5206;&#x6027;&#x80FD;&#x654F;&#x611F;&#x6A21;&#x5757;&#x3001;&#x6216;&#x8005;&#x90E8;&#x7F72;&#x5728;small&#x7CFB;&#x7EDF;&#x7684;&#x573A;&#x666F;&#x4E0B;&#xFF0C;&#x9700;&#x8981;&#x4EE5;Passthrough&#x6A21;&#x5F0F;&#x90E8;&#x7F72;&#xFF0C;&#x672C;&#x6587;&#x6863;&#x5728;&#x4E8E;&#x8BA8;&#x8BBA;Passthrough&#x6A21;&#x5F0F;&#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#x4EE5;&#x53CA;&#x4E0E;IPC&#x6A21;&#x5F0F;&#x7684;&#x517C;&#x5BB9;&#x3002;</p>
<h1 class="mume-header" id="cpp%E6%96%B9%E6%A1%88">CPP&#x65B9;&#x6848;</h1>

<h2 class="mume-header" id="ipc%E6%A8%A1%E5%BC%8F">IPC&#x6A21;&#x5F0F;</h2>

<p>&#x5728;&#x76EE;&#x524D;&#x5DF2;&#x7ECF;&#x652F;&#x6301;&#x7684;IPC&#x6A21;&#x5F0F;&#x4E2D;&#xFF0C;&#x63A5;&#x53E3;&#x57FA;&#x4E8E;IPC IRemoteBroker&#x6A21;&#x5F0F;&#x6784;&#x5EFA;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x901A;&#x8FC7;<code>IFoo</code>&#x63A5;&#x53E3;&#x7C7B;&#x4E2D;&#x7684;&#x9759;&#x6001;&#x65B9;&#x6CD5;<code>Get</code>&#x83B7;&#x53D6;<code>FooProxy</code>&#x5B9E;&#x4F8B;&#x3002;&#x5728;&#x8BE5;&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x8C03;&#x7528;&#x8005;&#x4E0D;&#x53EF;&#x89C1;<code>FooProxy</code>&#x5BF9;&#x8C61;&#xFF0C;&#x5728;&#x4E00;&#x5B9A;&#x7A0B;&#x5EA6;&#x4E0A;&#x5B9E;&#x73B0;&#x4E86;&#x63A5;&#x53E3;&#x5206;&#x79BB;&#x3002;</p>
<p>&#x5728;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;<code>FooService</code>&#x4E3A;&#x5F00;&#x53D1;&#x8005;&#x5B9E;&#x73B0;&#x7684;HDI&#x63A5;&#x53E3;&#x5B9E;&#x73B0;&#x5B9E;&#x4F8B;&#xFF0C;&#x5B83;&#x9700;&#x8981;&#x7EE7;&#x627F;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;<code>FooStub</code>,<code>FooStub</code>&#x4E2D;&#x5BF9;&#x5904;&#x7406;IPC&#x8C03;&#x7528;&#x7684;&#x5E8F;&#x5217;&#x5316;/&#x53CD;&#x5E8F;&#x5217;&#x5316;&#x518D;&#x8C03;&#x7528;<code>FooService</code>&#x4E2D;&#x7684;&#x63A5;&#x53E3;&#x5B9E;&#x73B0;&#x3002;<code>FooDriver</code>&#x4F5C;&#x4E3A;UHDF&#x9A71;&#x52A8;&#x5165;&#x53E3;&#xFF0C;&#x5728;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x5B9E;&#x4F8B;&#x5316;<code>FooService</code>&#xFF0C;&#x5E76;&#x5728;<code>IoService</code>&#x7684;<code>dispatch</code>&#x56DE;&#x8C03;&#x63A5;&#x53E3;&#x4E2D;&#x8C03;&#x7528;&#x5176;&#x7EE7;&#x627F;&#x7684;<code>OnRemoteRequest</code>&#x63A5;&#x53E3;&#xFF0C;&#x5B8C;&#x6210;&#x63A5;&#x53E3;&#x8C03;&#x7528;&#x3002;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="450px" preserveAspectRatio="none" style="width:297px;height:450px;background:#FFFFFF;" version="1.1" viewBox="0 0 297 450" width="297px" zoomAndPan="magnify"><defs/><g><!--MD5=[dbe822af5315d250a19fa9c1c2eee919]
class IRemoteBroker--><rect codeline="2" fill="#FEFECE" height="48" id="IRemoteBroker" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="124" x="7.5" y="7"/><ellipse cx="22.5" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M25.4688,28.6406 Q24.8906,28.9375 24.25,29.0781 Q23.6094,29.2344 22.9063,29.2344 Q20.4063,29.2344 19.0781,27.5938 Q17.7656,25.9375 17.7656,22.8125 Q17.7656,19.6875 19.0781,18.0313 Q20.4063,16.375 22.9063,16.375 Q23.6094,16.375 24.25,16.5313 Q24.9063,16.6875 25.4688,16.9844 L25.4688,19.7031 Q24.8438,19.125 24.25,18.8594 Q23.6563,18.5781 23.0313,18.5781 Q21.6875,18.5781 21,19.6563 Q20.3125,20.7188 20.3125,22.8125 Q20.3125,24.9063 21,25.9844 Q21.6875,27.0469 23.0313,27.0469 Q23.6563,27.0469 24.25,26.7813 Q24.8438,26.5 25.4688,25.9219 L25.4688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="92" x="36.5" y="27.1543">IRemoteBroker</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8.5" x2="130.5" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8.5" x2="130.5" y1="47" y2="47"/><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="5" fill="#FEFECE" height="73.6094" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="89" x="25" y="115"/><ellipse cx="53.5" cy="131" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M49.4219,126.7656 L49.4219,124.6094 L56.8125,124.6094 L56.8125,126.7656 L54.3438,126.7656 L54.3438,134.8438 L56.8125,134.8438 L56.8125,137 L49.4219,137 L49.4219,134.8438 L51.8906,134.8438 L51.8906,126.7656 L49.4219,126.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="70.5" y="135.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="26" x2="113" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="26" x2="113" y1="155" y2="155"/><ellipse cx="36" cy="166" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="63" x="45" y="169.2104">static Get()</text><ellipse cx="36" cy="178.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="45" y="182.0151">Foo()</text><!--MD5=[0e92740ce205f8c4d12b2c183e22bb96]
class FooProxy--><rect codeline="10" fill="#FEFECE" height="73.6094" id="FooProxy" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="109" x="7" y="249"/><ellipse cx="31.45" cy="265" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M34.4188,270.6406 Q33.8406,270.9375 33.2,271.0781 Q32.5594,271.2344 31.8563,271.2344 Q29.3563,271.2344 28.0281,269.5938 Q26.7156,267.9375 26.7156,264.8125 Q26.7156,261.6875 28.0281,260.0313 Q29.3563,258.375 31.8563,258.375 Q32.5594,258.375 33.2,258.5313 Q33.8563,258.6875 34.4188,258.9844 L34.4188,261.7031 Q33.7938,261.125 33.2,260.8594 Q32.6063,260.5781 31.9813,260.5781 Q30.6375,260.5781 29.95,261.6563 Q29.2625,262.7188 29.2625,264.8125 Q29.2625,266.9063 29.95,267.9844 Q30.6375,269.0469 31.9813,269.0469 Q32.6063,269.0469 33.2,268.7813 Q33.7938,268.5 34.4188,267.9219 L34.4188,270.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="47.55" y="269.1543">FooProxy</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="115" y1="281" y2="281"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="115" y1="289" y2="289"/><ellipse cx="18" cy="300" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="27" y="303.2104">SendRequest()</text><ellipse cx="18" cy="312.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="27" y="316.0151">Foo()</text><!--MD5=[dd82cabe89ad165c6fa0c3e43ad78fa1]
class FooStub--><rect codeline="15" fill="#FEFECE" height="73.6094" id="FooStub" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="139" x="151" y="249"/><ellipse cx="190.75" cy="265" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M193.7188,270.6406 Q193.1406,270.9375 192.5,271.0781 Q191.8594,271.2344 191.1563,271.2344 Q188.6563,271.2344 187.3281,269.5938 Q186.0156,267.9375 186.0156,264.8125 Q186.0156,261.6875 187.3281,260.0313 Q188.6563,258.375 191.1563,258.375 Q191.8594,258.375 192.5,258.5313 Q193.1563,258.6875 193.7188,258.9844 L193.7188,261.7031 Q193.0938,261.125 192.5,260.8594 Q191.9063,260.5781 191.2813,260.5781 Q189.9375,260.5781 189.25,261.6563 Q188.5625,262.7188 188.5625,264.8125 Q188.5625,266.9063 189.25,267.9844 Q189.9375,269.0469 191.2813,269.0469 Q191.9063,269.0469 192.5,268.7813 Q193.0938,268.5 193.7188,267.9219 L193.7188,270.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="52" x="210.25" y="269.1543">FooStub</text><line style="stroke:#A80036;stroke-width:1.5;" x1="152" x2="289" y1="281" y2="281"/><line style="stroke:#A80036;stroke-width:1.5;" x1="152" x2="289" y1="289" y2="289"/><ellipse cx="162" cy="300" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="113" x="171" y="303.2104">OnRemoteRequest()</text><ellipse cx="162" cy="312.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="54" x="171" y="316.0151">FooStub()</text><!--MD5=[439980ff4e316fcea7eb434b1c1f4104]
class FooService--><rect codeline="20" fill="#FEFECE" height="60.8047" id="FooService" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="100" x="170.5" y="383"/><ellipse cx="185.5" cy="399" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M188.4688,404.6406 Q187.8906,404.9375 187.25,405.0781 Q186.6094,405.2344 185.9063,405.2344 Q183.4063,405.2344 182.0781,403.5938 Q180.7656,401.9375 180.7656,398.8125 Q180.7656,395.6875 182.0781,394.0313 Q183.4063,392.375 185.9063,392.375 Q186.6094,392.375 187.25,392.5313 Q187.9063,392.6875 188.4688,392.9844 L188.4688,395.7031 Q187.8438,395.125 187.25,394.8594 Q186.6563,394.5781 186.0313,394.5781 Q184.6875,394.5781 184,395.6563 Q183.3125,396.7188 183.3125,398.8125 Q183.3125,400.9063 184,401.9844 Q184.6875,403.0469 186.0313,403.0469 Q186.6563,403.0469 187.25,402.7813 Q187.8438,402.5 188.4688,401.9219 L188.4688,404.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="199.5" y="403.1543">FooService</text><line style="stroke:#A80036;stroke-width:1.5;" x1="171.5" x2="269.5" y1="415" y2="415"/><line style="stroke:#A80036;stroke-width:1.5;" x1="171.5" x2="269.5" y1="423" y2="423"/><ellipse cx="181.5" cy="434" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="190.5" y="437.2104">Foo()</text><!--MD5=[ebfce64199542a9c45eae0853c3cc247]
class FooDriver--><rect codeline="24" fill="#FEFECE" height="60.8047" id="FooDriver" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="127" x="157" y="121.5"/><ellipse cx="188.2" cy="137.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M191.1688,143.1406 Q190.5906,143.4375 189.95,143.5781 Q189.3094,143.7344 188.6063,143.7344 Q186.1063,143.7344 184.7781,142.0938 Q183.4656,140.4375 183.4656,137.3125 Q183.4656,134.1875 184.7781,132.5313 Q186.1063,130.875 188.6063,130.875 Q189.3094,130.875 189.95,131.0313 Q190.6063,131.1875 191.1688,131.4844 L191.1688,134.2031 Q190.5438,133.625 189.95,133.3594 Q189.3563,133.0781 188.7313,133.0781 Q187.3875,133.0781 186.7,134.1563 Q186.0125,135.2188 186.0125,137.3125 Q186.0125,139.4063 186.7,140.4844 Q187.3875,141.5469 188.7313,141.5469 Q189.3563,141.5469 189.95,141.2813 Q190.5438,141 191.1688,140.4219 L191.1688,143.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="59" x="205.8" y="141.6543">FooDriver</text><line style="stroke:#A80036;stroke-width:1.5;" x1="158" x2="283" y1="153.5" y2="153.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="115" x="163" y="167.7104">HdfDriverEntry entry</text><line style="stroke:#A80036;stroke-width:1.5;" x1="158" x2="283" y1="174.3047" y2="174.3047"/><!--MD5=[097aa12facb78b25f392a51bbfe39a38]
reverse link IRemoteBroker to IFoo--><path codeline="28" d="M69.5,60.56 C69.5,76.82 69.5,97.33 69.5,114.71 " fill="none" id="IRemoteBroker-backto-IFoo" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="69.5,55.23,65.5,64.23,69.5,60.23,73.5,64.23,69.5,55.23" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[b6ca8e2f962a56f0127cbfdad4cb7804]
reverse link IFoo to FooProxy--><path codeline="29" d="M66.08,209.38 C65.27,222.8 64.42,236.76 63.68,248.97 " fill="none" id="IFoo-backto-FooProxy" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="59.12,208.61,67.31,189.07,73.09,209.46,59.12,208.61" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[bf8a1dae4110678dd0a75ba5dac2fa31]
reverse link IFoo to FooStub--><path codeline="30" d="M125.85,202.26 C143.58,217.76 162.81,234.57 179.29,248.97 " fill="none" id="IFoo-backto-FooStub" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="121.21,207.5,110.76,189.07,130.43,196.96,121.21,207.5" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[e68f56065b40e6b982ceb28a2af4f872]
reverse link FooStub to FooService--><path codeline="31" d="M220.5,343.73 C220.5,357.15 220.5,370.95 220.5,382.62 " fill="none" id="FooStub-backto-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="213.5,343.3,220.5,323.3,227.5,343.3,213.5,343.3" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[f17cc26654120991bb7b5d069d3e48b8]
link FooDriver to FooStub--><path codeline="32" d="M220.5,182.62 C220.5,202.23 220.5,228.08 220.5,248.89 " fill="none" id="FooDriver-FooStub" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="211.675" y="202.583">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="211.7875" y="238.0574">1</text><!--MD5=[ff53f831f3c92db8bcbe0bd80ca51113]
@startuml
!theme vibrant
    class IRemoteBroker {
    }

    interface IFoo {
    + static Get()
    + Foo()
    }

    class FooProxy {
    + SendRequest()
    + Foo()
    }

    class FooStub {
    + OnRemoteRequest()
    + FooStub()
    }

    class FooService {
    + Foo()
    }

    class FooDriver {
    HdfDriverEntry entry
    }

    IRemoteBroker <- - IFoo
    IFoo <|- - FooProxy
    IFoo <|- - FooStub
    FooStub <|- -  FooService
    FooDriver "1" - - "1" FooStub
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
    class IRemoteBroker {
    }

    interface IFoo {
    + static Get()
    + Foo()
    }

    class FooProxy {
    + SendRequest()
    + Foo()
    }

    class FooStub {
    + OnRemoteRequest()
    + FooStub()
    }

    class FooService {
    + Foo()
    }

    class FooDriver {
    HdfDriverEntry entry
    }

    IRemoteBroker <- - IFoo
    IFoo <|- - FooProxy
    IFoo <|- - FooStub
    FooStub <|- -  FooService
    FooDriver "1" - - "1" FooStub
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x5728;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x5B9E;&#x8D28;&#x4E0A;&#x6CA1;&#x6709;&#x628A;<code>FooService</code>&#x4E0E;<code>FooStub</code>&#x89E3;&#x8026;&#xFF0C;&#x8FD9;&#x5C06;&#x5728;PassThrough&#x6A21;&#x5F0F;&#x4E0B;&#x72EC;&#x7ACB;&#x52A0;&#x8F7D;<code>FooService</code>&#x9020;&#x6210;&#x4E00;&#x5B9A;&#x56F0;&#x96BE;&#x3002;</p>
<h2 class="mume-header" id="passthrough%E6%A8%A1%E5%BC%8F">Passthrough&#x6A21;&#x5F0F;</h2>

<p>&#x5728;Passthrough&#xFF08;&#x76F4;&#x901A;&#xFF09;&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x671F;&#x671B;&#x8C03;&#x7528;&#x8005;&#x4F7F;&#x7528;<code>IFoo</code>&#x63A5;&#x53E3;&#x5F62;&#x5F0F;&#x4E0D;&#x53D8;&#x66F4;&#xFF0C;&#x4ECD;&#x7136;&#x901A;&#x8FC7;<code>IFoo::Get()</code>&#x83B7;&#x53D6;&#x5B9E;&#x4F8B;&#xFF0C;&#x901A;&#x8FC7;&#x8BE5;&#x63A5;&#x53E3;&#x5B9E;&#x4F8B;&#x5316;&#x670D;&#x52A1;&#x7AEF;&#x5E76;&#x8FD4;&#x56DE;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x76F4;&#x901A;&#x8C03;&#x7528;&#x3002;</p>
<h3 class="mume-header" id="%E7%9B%AE%E5%89%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E9%97%AE%E9%A2%98">&#x76EE;&#x524D;&#x5B58;&#x5728;&#x7684;&#x95EE;&#x9898;&#xFF1A;</h3>

<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="329px" preserveAspectRatio="none" style="width:256px;height:329px;background:#FFFFFF;" version="1.1" viewBox="0 0 256 329" width="256px" zoomAndPan="magnify"><defs/><g><!--MD5=[dbe822af5315d250a19fa9c1c2eee919]
class IRemoteBroker--><rect codeline="2" fill="#FEFECE" height="48" id="IRemoteBroker" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="124" x="7" y="7"/><ellipse cx="22" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M24.9688,28.6406 Q24.3906,28.9375 23.75,29.0781 Q23.1094,29.2344 22.4063,29.2344 Q19.9063,29.2344 18.5781,27.5938 Q17.2656,25.9375 17.2656,22.8125 Q17.2656,19.6875 18.5781,18.0313 Q19.9063,16.375 22.4063,16.375 Q23.1094,16.375 23.75,16.5313 Q24.4063,16.6875 24.9688,16.9844 L24.9688,19.7031 Q24.3438,19.125 23.75,18.8594 Q23.1563,18.5781 22.5313,18.5781 Q21.1875,18.5781 20.5,19.6563 Q19.8125,20.7188 19.8125,22.8125 Q19.8125,24.9063 20.5,25.9844 Q21.1875,27.0469 22.5313,27.0469 Q23.1563,27.0469 23.75,26.7813 Q24.3438,26.5 24.9688,25.9219 L24.9688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="92" x="36" y="27.1543">IRemoteBroker</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="130" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="130" y1="47" y2="47"/><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="5" fill="#FEFECE" height="73.6094" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="89" x="24.5" y="115"/><ellipse cx="53" cy="131" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M48.9219,126.7656 L48.9219,124.6094 L56.3125,124.6094 L56.3125,126.7656 L53.8438,126.7656 L53.8438,134.8438 L56.3125,134.8438 L56.3125,137 L48.9219,137 L48.9219,134.8438 L51.3906,134.8438 L51.3906,126.7656 L48.9219,126.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="70" y="135.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="25.5" x2="112.5" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="25.5" x2="112.5" y1="155" y2="155"/><ellipse cx="35.5" cy="166" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="63" x="44.5" y="169.2104">static Get()</text><ellipse cx="35.5" cy="178.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="44.5" y="182.0151">Foo()</text><!--MD5=[dd82cabe89ad165c6fa0c3e43ad78fa1]
class FooStub--><rect codeline="10" fill="#FEFECE" height="73.6094" id="FooStub" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="139" x="64.5" y="249"/><ellipse cx="104.25" cy="265" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M107.2188,270.6406 Q106.6406,270.9375 106,271.0781 Q105.3594,271.2344 104.6563,271.2344 Q102.1563,271.2344 100.8281,269.5938 Q99.5156,267.9375 99.5156,264.8125 Q99.5156,261.6875 100.8281,260.0313 Q102.1563,258.375 104.6563,258.375 Q105.3594,258.375 106,258.5313 Q106.6563,258.6875 107.2188,258.9844 L107.2188,261.7031 Q106.5938,261.125 106,260.8594 Q105.4063,260.5781 104.7813,260.5781 Q103.4375,260.5781 102.75,261.6563 Q102.0625,262.7188 102.0625,264.8125 Q102.0625,266.9063 102.75,267.9844 Q103.4375,269.0469 104.7813,269.0469 Q105.4063,269.0469 106,268.7813 Q106.5938,268.5 107.2188,267.9219 L107.2188,270.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="52" x="123.75" y="269.1543">FooStub</text><line style="stroke:#A80036;stroke-width:1.5;" x1="65.5" x2="202.5" y1="281" y2="281"/><line style="stroke:#A80036;stroke-width:1.5;" x1="65.5" x2="202.5" y1="289" y2="289"/><ellipse cx="75.5" cy="300" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="113" x="84.5" y="303.2104">OnRemoteRequest()</text><ellipse cx="75.5" cy="312.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="54" x="84.5" y="316.0151">FooStub()</text><!--MD5=[439980ff4e316fcea7eb434b1c1f4104]
class FooService--><rect codeline="15" fill="#FEFECE" height="60.8047" id="FooService" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="100" x="149" y="121.5"/><ellipse cx="164" cy="137.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M166.9688,143.1406 Q166.3906,143.4375 165.75,143.5781 Q165.1094,143.7344 164.4063,143.7344 Q161.9063,143.7344 160.5781,142.0938 Q159.2656,140.4375 159.2656,137.3125 Q159.2656,134.1875 160.5781,132.5313 Q161.9063,130.875 164.4063,130.875 Q165.1094,130.875 165.75,131.0313 Q166.4063,131.1875 166.9688,131.4844 L166.9688,134.2031 Q166.3438,133.625 165.75,133.3594 Q165.1563,133.0781 164.5313,133.0781 Q163.1875,133.0781 162.5,134.1563 Q161.8125,135.2188 161.8125,137.3125 Q161.8125,139.4063 162.5,140.4844 Q163.1875,141.5469 164.5313,141.5469 Q165.1563,141.5469 165.75,141.2813 Q166.3438,141 166.9688,140.4219 L166.9688,143.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="178" y="141.6543">FooService</text><line style="stroke:#A80036;stroke-width:1.5;" x1="150" x2="248" y1="153.5" y2="153.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="150" x2="248" y1="161.5" y2="161.5"/><ellipse cx="160" cy="172.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="169" y="175.7104">Foo()</text><!--MD5=[8842a1d0aa7ae20f37afbed243a2f16a]
link FooService to FooStub--><path codeline="18" d="M184.41,182.62 C177.4,196.87 168.76,214.41 160.63,230.92 " fill="none" id="FooService-to-FooStub" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="166.9,234.04,151.78,248.89,154.34,227.86,166.9,234.04" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[097aa12facb78b25f392a51bbfe39a38]
reverse link IRemoteBroker to IFoo--><path codeline="19" d="M69,60.56 C69,76.82 69,97.33 69,114.71 " fill="none" id="IRemoteBroker-backto-IFoo" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="69,55.23,65,64.23,69,60.23,73,64.23,69,55.23" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[bf8a1dae4110678dd0a75ba5dac2fa31]
reverse link IFoo to FooStub--><path codeline="20" d="M95.82,207.47 C102.71,221.46 109.96,236.17 116.26,248.97 " fill="none" id="IFoo-backto-FooStub" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="89.32,210.1,86.76,189.07,101.88,203.92,89.32,210.1" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[43e0854bef241fe75e524439e42ca76c]
@startuml
!theme vibrant
    class IRemoteBroker {
    }

    interface IFoo {
        + static Get()
        + Foo()
    }

    class FooStub {
        + OnRemoteRequest()
        + FooStub()
    }

    class FooService {
        + Foo()
    }
    FooService - -|> FooStub
    IRemoteBroker <- - IFoo
    IFoo <|- - FooStub
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
    class IRemoteBroker {
    }

    interface IFoo {
        + static Get()
        + Foo()
    }

    class FooStub {
        + OnRemoteRequest()
        + FooStub()
    }

    class FooService {
        + Foo()
    }
    FooService - -|> FooStub
    IRemoteBroker <- - IFoo
    IFoo <|- - FooStub
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><ul>
<li><code>FooService</code>&#x7EE7;&#x627F;&#x4E86;<code>FooStub</code>&#xFF0C;&#x5728;Passthrough&#x6A21;&#x578B;&#x4E0B;&#x60F3;&#x8981;&#x6D88;&#x9664;<code>FooStub</code>&#x5C06;&#x96BE;&#x4EE5;&#x8FBE;&#x6210;&#x3002;</li>
<li><code>IFoo</code>&#x7EE7;&#x627F;&#x4E86;<code>IRemoteBroker</code>&#xFF0C;&#x60F3;&#x8981;&#x76F4;&#x63A5;&#x5B9E;&#x73B0;<code>IFoo</code>,&#x8FD8;&#x5FC5;&#x987B;&#x5B9E;&#x73B0;&#x7EE7;&#x627F;<code>IRemoteProxy&lt;IFoo&gt;</code>&#x6216;<code>IRemoteStub&lt;IFoo&gt;</code>&#x53BB;&#x5B9E;&#x73B0;<code>IRemoteBroker</code>&#x7684;&#x90E8;&#x5206;&#x7EAF;&#x865A;&#x63A5;&#x53E3;&#xFF0C;&#x8FD9;&#x4E5F;&#x7ED9;&#x6D88;&#x9664;<code>FooStub</code>&#x5E26;&#x6765;&#x4E86;&#x56F0;&#x96BE;&#x3002;</li>
</ul>
<h3 class="mume-header" id="%E4%B8%BB%E8%A6%81%E8%AE%BE%E8%AE%A1">&#x4E3B;&#x8981;&#x8BBE;&#x8BA1;</h3>

<p>&#x6838;&#x5FC3;&#x601D;&#x8DEF;&#x662F;&#x5C06;&#x63A5;&#x53E3;&#x7C7B;&#x4E0E;IPC&#x89E3;&#x8026;&#xFF0C;&#x5728;&#x670D;&#x52A1;&#x5B9E;&#x73B0;&#x65F6;&#x53EA;&#x5B9E;&#x73B0;&#x7EAF;&#x51C0;&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#x672C;&#x8EAB;&#xFF0C;&#x4E0D;&#x518D;&#x5F15;&#x5165;&#x4EFB;&#x4F55;IPC&#x5BF9;&#x8C61;&#xFF0C;&#x5728;&#x5B9E;&#x73B0;&#x5C42;&#x9762;&#x63D0;&#x4F9B;&#x4E86;&#x72EC;&#x7ACB;&#x52A0;&#x8F7D;&#x7684;&#x80FD;&#x529B;&#x3002;<br>
&#x670D;&#x52A1;&#x5B9E;&#x73B0;&#x5177;&#x4F53;&#x52A0;&#x8F7D;&#x8FC7;&#x7A0B;&#x7531;&#x6846;&#x67B6;&#x63D0;&#x4F9B;&#xFF0C;&#x4E0D;&#x518D;&#x7531;stub&#x751F;&#x6210;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#xFF0C;&#x4FBF;&#x4E8E;&#x5728;passthrough&#x65F6;&#x7EDF;&#x4E00;&#x52A0;&#x8F7D;&#x6D41;&#x7A0B;&#x3002;</p>
<h4 class="mume-header" id="%E5%AE%A2%E6%88%B7%E7%AB%AF">&#x5BA2;&#x6237;&#x7AEF;</h4>

<ul>
<li>Passthrough&#x6A21;&#x5F0F;&#x548C;IPC&#x6A21;&#x5F0F;&#x3001;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#x5171;&#x7528;HDI&#x63A5;&#x53E3;&#x7C7B;&#x540D;&#x79F0;&#xFF0C;&#x63A5;&#x53E3;&#x7C7B;&#x540D;&#x79F0;&#x4E0D;&#x53D8;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x518D;&#x7EE7;&#x627F;<code>IRemoteBroker</code>&#xFF0C;&#x53EA;&#x7EE7;&#x627F;Refbase&#x4FBF;&#x4E8E;&#x4F7F;&#x7528;sptr&#x8FDB;&#x884C;&#x751F;&#x547D;&#x5468;&#x671F;&#x7BA1;&#x7406;</li>
<li>&#x91CD;&#x6784;IPC&#x63A5;&#x53E3;&#x6A21;&#x578B;&#xFF0C;&#x73B0;&#x5728;&#x8981;&#x6C42;<code>IFoo</code>&#x5FC5;&#x987B;&#x7EE7;<code>IRemoteBroker</code>&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x5B9A;&#x4E49;&#x6A21;&#x677F;&#x7C7B;<code>IProxyBroker</code>&#x66FF;&#x4EE3;<code>IRemoteProxy</code>&#xFF0C;&#x4F7F;&#x7528;&#x6A21;&#x677F;&#x6D88;&#x9664;&#x76F4;&#x63A5;&#x7EE7;&#x627F;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x80FD;&#x6784;&#x9020;&#x51FA;&#x4E0D;&#x76F4;&#x63A5;&#x4F9D;&#x8D56;IPC&#x7C7B;&#x7684;<code>IFoo</code></li>
</ul>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="583px" preserveAspectRatio="none" style="width:329px;height:583px;background:#FFFFFF;" version="1.1" viewBox="0 0 329 583" width="329px" zoomAndPan="magnify"><defs/><g><!--MD5=[3d5a8c1da44c46ddc545ce05907f84a6]
class HdiBase--><rect codeline="2" fill="#FEFECE" height="48" id="HdiBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="202.5" y="115"/><ellipse cx="217.5" cy="131" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M220.4688,136.6406 Q219.8906,136.9375 219.25,137.0781 Q218.6094,137.2344 217.9063,137.2344 Q215.4063,137.2344 214.0781,135.5938 Q212.7656,133.9375 212.7656,130.8125 Q212.7656,127.6875 214.0781,126.0313 Q215.4063,124.375 217.9063,124.375 Q218.6094,124.375 219.25,124.5313 Q219.9063,124.6875 220.4688,124.9844 L220.4688,127.7031 Q219.8438,127.125 219.25,126.8594 Q218.6563,126.5781 218.0313,126.5781 Q216.6875,126.5781 216,127.6563 Q215.3125,128.7188 215.3125,130.8125 Q215.3125,132.9063 216,133.9844 Q216.6875,135.0469 218.0313,135.0469 Q218.6563,135.0469 219.25,134.7813 Q219.8438,134.5 220.4688,133.9219 L220.4688,136.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="231.5" y="135.1543">HdiBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="203.5" x2="284.5" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="203.5" x2="284.5" y1="155" y2="155"/><!--MD5=[5d3ef477e9ed013ebb01b7ef92565625]
class RefBase--><rect codeline="4" fill="#FEFECE" height="48" id="RefBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="202.5" y="7"/><ellipse cx="217.5" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M220.4688,28.6406 Q219.8906,28.9375 219.25,29.0781 Q218.6094,29.2344 217.9063,29.2344 Q215.4063,29.2344 214.0781,27.5938 Q212.7656,25.9375 212.7656,22.8125 Q212.7656,19.6875 214.0781,18.0313 Q215.4063,16.375 217.9063,16.375 Q218.6094,16.375 219.25,16.5313 Q219.9063,16.6875 220.4688,16.9844 L220.4688,19.7031 Q219.8438,19.125 219.25,18.8594 Q218.6563,18.5781 218.0313,18.5781 Q216.6875,18.5781 216,19.6563 Q215.3125,20.7188 215.3125,22.8125 Q215.3125,24.9063 216,25.9844 Q216.6875,27.0469 218.0313,27.0469 Q218.6563,27.0469 219.25,26.7813 Q219.8438,26.5 220.4688,25.9219 L220.4688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="231.5" y="27.1543">RefBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="203.5" x2="284.5" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="203.5" x2="284.5" y1="47" y2="47"/><!--MD5=[dbe822af5315d250a19fa9c1c2eee919]
class IRemoteBroker--><rect codeline="6" fill="#FEFECE" height="48" id="IRemoteBroker" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="124" x="7" y="248.5"/><ellipse cx="22" cy="264.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M24.9688,270.1406 Q24.3906,270.4375 23.75,270.5781 Q23.1094,270.7344 22.4063,270.7344 Q19.9063,270.7344 18.5781,269.0938 Q17.2656,267.4375 17.2656,264.3125 Q17.2656,261.1875 18.5781,259.5313 Q19.9063,257.875 22.4063,257.875 Q23.1094,257.875 23.75,258.0313 Q24.4063,258.1875 24.9688,258.4844 L24.9688,261.2031 Q24.3438,260.625 23.75,260.3594 Q23.1563,260.0781 22.5313,260.0781 Q21.1875,260.0781 20.5,261.1563 Q19.8125,262.2188 19.8125,264.3125 Q19.8125,266.4063 20.5,267.4844 Q21.1875,268.5469 22.5313,268.5469 Q23.1563,268.5469 23.75,268.2813 Q24.3438,268 24.9688,267.4219 L24.9688,270.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="92" x="36" y="268.6543">IRemoteBroker</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="130" y1="280.5" y2="280.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="130" y1="288.5" y2="288.5"/><!--MD5=[2e3b5df6c97ccb25a58cdc076d5958bd]
class IProxyBroker--><rect codeline="8" fill="#FEFECE" height="48" id="IProxyBroker" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="109" x="101.5" y="382"/><ellipse cx="116.5" cy="398" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M119.4688,403.6406 Q118.8906,403.9375 118.25,404.0781 Q117.6094,404.2344 116.9063,404.2344 Q114.4063,404.2344 113.0781,402.5938 Q111.7656,400.9375 111.7656,397.8125 Q111.7656,394.6875 113.0781,393.0313 Q114.4063,391.375 116.9063,391.375 Q117.6094,391.375 118.25,391.5313 Q118.9063,391.6875 119.4688,391.9844 L119.4688,394.7031 Q118.8438,394.125 118.25,393.8594 Q117.6563,393.5781 117.0313,393.5781 Q115.6875,393.5781 115,394.6563 Q114.3125,395.7188 114.3125,397.8125 Q114.3125,399.9063 115,400.9844 Q115.6875,402.0469 117.0313,402.0469 Q117.6563,402.0469 118.25,401.7813 Q118.8438,401.5 119.4688,400.9219 L119.4688,403.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="77" x="130.5" y="402.1543">IProxyBroker</text><line style="stroke:#A80036;stroke-width:1.5;" x1="102.5" x2="209.5" y1="414" y2="414"/><line style="stroke:#A80036;stroke-width:1.5;" x1="102.5" x2="209.5" y1="422" y2="422"/><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="10" fill="#FEFECE" height="99.2188" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="156" x="166" y="223"/><ellipse cx="226.25" cy="239" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M222.1719,234.7656 L222.1719,232.6094 L229.5625,232.6094 L229.5625,234.7656 L227.0938,234.7656 L227.0938,242.8438 L229.5625,242.8438 L229.5625,245 L222.1719,245 L222.1719,242.8438 L224.6406,242.8438 L224.6406,234.7656 L222.1719,234.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="246.75" y="243.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="167" x2="321" y1="255" y2="255"/><line style="stroke:#A80036;stroke-width:1.5;" x1="167" x2="321" y1="263" y2="263"/><ellipse cx="177" cy="274" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="92" x="186" y="277.2104">Get(bool isStub)</text><ellipse cx="177" cy="286.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="130" x="186" y="290.0151">Get(servName, isStub)</text><ellipse cx="177" cy="299.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="87" x="186" y="302.8198">GetDescriptor()</text><ellipse cx="177" cy="312.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" font-style="italic" lengthAdjust="spacing" textLength="28" x="186" y="315.6245">Foo()</text><!--MD5=[0e92740ce205f8c4d12b2c183e22bb96]
class FooProxy--><rect codeline="17" fill="#FEFECE" height="86.4141" id="FooProxy" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="211" x="50.5" y="490"/><ellipse cx="123.75" cy="506" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M126.7188,511.6406 Q126.1406,511.9375 125.5,512.0781 Q124.8594,512.2344 124.1563,512.2344 Q121.6563,512.2344 120.3281,510.5938 Q119.0156,508.9375 119.0156,505.8125 Q119.0156,502.6875 120.3281,501.0313 Q121.6563,499.375 124.1563,499.375 Q124.8594,499.375 125.5,499.5313 Q126.1563,499.6875 126.7188,499.9844 L126.7188,502.7031 Q126.0938,502.125 125.5,501.8594 Q124.9063,501.5781 124.2813,501.5781 Q122.9375,501.5781 122.25,502.6563 Q121.5625,503.7188 121.5625,505.8125 Q121.5625,507.9063 122.25,508.9844 Q122.9375,510.0469 124.2813,510.0469 Q124.9063,510.0469 125.5,509.7813 Q126.0938,509.5 126.7188,508.9219 L126.7188,511.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="56" x="144.25" y="510.1543">FooProxy</text><line style="stroke:#A80036;stroke-width:1.5;" x1="51.5" x2="260.5" y1="522" y2="522"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1.0;" width="6" x="58.5" y="530"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="185" x="70.5" y="536.2104">BrokerDelegator&lt;SampleProxy&gt;</text><line style="stroke:#A80036;stroke-width:1.5;" x1="51.5" x2="260.5" y1="542.8047" y2="542.8047"/><ellipse cx="61.5" cy="553.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="83" x="70.5" y="557.0151">SendRequest()</text><ellipse cx="61.5" cy="566.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="79" x="70.5" y="569.8198">Foo() override</text><!--MD5=[47eceadc436a5175bf90f3cf8fc075e1]
reverse link RefBase to HdiBase--><path codeline="23" d="M244,60.13 C244,77.15 244,98.6 244,114.68 " fill="none" id="RefBase-backto-HdiBase" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="244,55,240,64,244,60,248,64,244,55" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[a19457632ee0d013a549908270ea450a]
reverse link HdiBase to IFoo--><path codeline="24" d="M244,168.42 C244,184.33 244,204.59 244,222.93 " fill="none" id="HdiBase-backto-IFoo" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="244,163.21,240,172.21,244,168.21,248,172.21,244,163.21" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[63667146fe6040bc42090aea91c05714]
reverse link IFoo to IProxyBroker--><path codeline="25" d="M208.57,326.45 C195.64,345.76 181.69,366.61 171.41,381.98 " fill="none" id="IFoo-backto-IProxyBroker" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="211.48,322.09,203.147,327.3399,208.6966,326.2437,209.7928,331.7933,211.48,322.09" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[cd07bebf99f40db40c7aa05c1f8bd186]
reverse link IRemoteBroker to IProxyBroker--><path codeline="26" d="M87.22,301.04 C103,324.89 125.58,359.02 140.51,381.58 " fill="none" id="IRemoteBroker-backto-IProxyBroker" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="84.35,296.71,85.9756,306.4238,87.107,300.8812,92.6496,302.0126,84.35,296.71" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[22f6d464a4663a63279ca82c739c7e71]
reverse link IProxyBroker to FooProxy--><path codeline="27" d="M156,450.27 C156,463.12 156,477.17 156,489.94 " fill="none" id="IProxyBroker-backto-FooProxy" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="149,450.22,156,430.22,163,450.22,149,450.22" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[0003c4944ad54a6678cb4cdf2a5ff825]
@startuml
!theme vibrant
    class HdiBase {
    }
    class RefBase {
    }
    class IRemoteBroker {
    }
    class IProxyBroker {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }

    class FooProxy {
        + SendRequest()
        + Foo() override
        - {static} BrokerDelegator<SampleProxy>
    }

    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <- - IProxyBroker
    IRemoteBroker <- - IProxyBroker
    IProxyBroker <|- - FooProxy
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
    class HdiBase {
    }
    class RefBase {
    }
    class IRemoteBroker {
    }
    class IProxyBroker {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }

    class FooProxy {
        + SendRequest()
        + Foo() override
        - {static} BrokerDelegator<SampleProxy>
    }

    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <- - IProxyBroker
    IRemoteBroker <- - IProxyBroker
    IProxyBroker <|- - FooProxy
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x5BA2;&#x6237;&#x7AEF;&#x4E3B;&#x8981;&#x6D41;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="581px" preserveAspectRatio="none" style="width:743px;height:581px;background:#FFFFFF;" version="1.1" viewBox="0 0 743 581" width="743px" zoomAndPan="magnify"><defs><filter height="300%" id="f18fxpze6xht15" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="26" x2="26" y1="88.2969" y2="496.8906"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="171.5" x2="171.5" y1="88.2969" y2="496.8906"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="336.5" x2="336.5" y1="88.2969" y2="496.8906"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="459.5" x2="459.5" y1="88.2969" y2="496.8906"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="557.5" x2="557.5" y1="88.2969" y2="496.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="84.9951">Actor</text><ellipse cx="26" cy="15" fill="#FEFECE" filter="url(#f18fxpze6xht15)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,23 L26,50 M13,31 L39,31 M26,50 L13,65 M26,50 L39,65 " fill="none" filter="url(#f18fxpze6xht15)" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="508.8857">Actor</text><ellipse cx="26" cy="522.1875" fill="#FEFECE" filter="url(#f18fxpze6xht15)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,530.1875 L26,557.1875 M13,538.1875 L39,538.1875 M26,557.1875 L13,572.1875 M26,557.1875 L39,572.1875 " fill="none" filter="url(#f18fxpze6xht15)" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="43" x="148.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="155.5" y="72.9951">IFoo</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="43" x="148.5" y="495.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="155.5" y="515.8857">IFoo</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="127" x="271.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="113" x="278.5" y="72.9951">IServiceManager</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="127" x="271.5" y="495.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="113" x="278.5" y="515.8857">IServiceManager</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="91" x="412.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="77" x="419.5" y="72.9951">HdiSupport</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="91" x="412.5" y="495.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="77" x="419.5" y="515.8857">HdiSupport</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="77" x="517.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="524.5" y="72.9951">FooProxy</text><rect fill="#FEFECE" filter="url(#f18fxpze6xht15)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="77" x="517.5" y="495.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="524.5" y="515.8857">FooProxy</text><polygon fill="#A80036" points="160,115.4297,170,119.4297,160,123.4297,164,119.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="166" y1="119.4297" y2="119.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="122" x="33" y="114.3638">Get(isStub = false)</text><polygon fill="#A80036" points="325,144.5625,335,148.5625,325,152.5625,329,148.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="172" x2="331" y1="148.5625" y2="148.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="23" x="179" y="143.4966">Get</text><polygon fill="#A80036" points="325,173.6953,335,177.6953,325,181.6953,329,177.6953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="172" x2="331" y1="177.6953" y2="177.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="70" x="179" y="172.6294">GetService</text><polygon fill="#A80036" points="183,202.8281,173,206.8281,183,210.8281,179,206.8281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="177" x2="336" y1="206.8281" y2="206.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="141" x="189" y="201.7622">sptr&lt;IRemoteObject&gt;</text><polygon fill="#A80036" points="448,231.9609,458,235.9609,448,239.9609,452,235.9609" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="172" x2="454" y1="235.9609" y2="235.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="231" x="179" y="230.895">hdi_facecast(sptr&lt;IRemoteObject&gt;)</text><polygon fill="#A80036" points="546,261.0938,556,265.0938,546,269.0938,550,265.0938" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="460" x2="552" y1="265.0938" y2="265.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="467" y="260.0278">new</text><polygon fill="#A80036" points="37,290.2266,27,294.2266,37,298.2266,33,294.2266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="31" x2="459" y1="294.2266" y2="294.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="73" x="43" y="289.1606">sptr&lt;IFoo&gt;</text><polygon fill="#A80036" points="546,319.3594,556,323.3594,546,327.3594,550,323.3594" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="552" y1="323.3594" y2="323.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="43" x="33" y="318.2935">APICall</text><line style="stroke:#A80036;stroke-width:1.0;" x1="558" x2="600" y1="352.4922" y2="352.4922"/><line style="stroke:#A80036;stroke-width:1.0;" x1="600" x2="600" y1="352.4922" y2="365.4922"/><line style="stroke:#A80036;stroke-width:1.0;" x1="559" x2="600" y1="365.4922" y2="365.4922"/><polygon fill="#A80036" points="569,361.4922,559,365.4922,569,369.4922,565,365.4922" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="146" x="565" y="347.4263">ParameterSerialization</text><line style="stroke:#A80036;stroke-width:1.0;" x1="558" x2="600" y1="394.625" y2="394.625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="600" x2="600" y1="394.625" y2="407.625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="559" x2="600" y1="407.625" y2="407.625"/><polygon fill="#A80036" points="569,403.625,559,407.625,569,411.625,565,407.625" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="171" x="565" y="389.5591">Remote()-&gt;SendRequest()</text><line style="stroke:#A80036;stroke-width:1.0;" x1="558" x2="600" y1="436.7578" y2="436.7578"/><line style="stroke:#A80036;stroke-width:1.0;" x1="600" x2="600" y1="436.7578" y2="449.7578"/><line style="stroke:#A80036;stroke-width:1.0;" x1="559" x2="600" y1="449.7578" y2="449.7578"/><polygon fill="#A80036" points="569,445.7578,559,449.7578,569,453.7578,565,449.7578" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="162" x="565" y="431.6919">ParameterDeserialization</text><polygon fill="#A80036" points="37,474.8906,27,478.8906,37,482.8906,33,478.8906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="31" x2="557" y1="478.8906" y2="478.8906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="39" x="43" y="473.8247">resule</text><!--MD5=[5d150e7532080025c8290c05e43a2c5a]
@startuml
actor       Actor       as actor
actor -> IFoo : Get(isStub = false)
IFoo -> IServiceManager : Get
IFoo -> IServiceManager : GetService
IFoo <- - IServiceManager : sptr<IRemoteObject>
IFoo -> HdiSupport : hdi_facecast(sptr<IRemoteObject>)
HdiSupport -> FooProxy : new
actor <- - HdiSupport : sptr<IFoo>
actor -> FooProxy : APICall
FooProxy -> FooProxy : ParameterSerialization
FooProxy -> FooProxy : Remote()->SendRequest()
FooProxy -> FooProxy : ParameterDeserialization
FooProxy - -> actor : resule
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p><strong>&#x7279;&#x522B;&#x6CE8;&#x610F;</strong>&#xFF1A;</p>
<ol>
<li>FooProxy&#x8981;&#x4F7F;&#x7528;static inline&#x6210;&#x5458;&#x53D8;&#x91CF;<code>static inline BrokerDelegator delegator_</code>&#x5C06;&#x6784;&#x9020;&#x51FD;&#x6570;&#x6CE8;&#x518C;&#x5230;IPC&#x6846;&#x67B6;&#x7684;<code>BrokerRegistration</code></li>
<li>&#x56E0;&#x4E3A;HDI&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x6CA1;&#x6709;&#x5B8C;&#x5168;&#x9075;&#x4ECE;IPC&#x6846;&#x67B6;&#x6A21;&#x578B;&#xFF0C;&#x6240;&#x4EE5;&#x4ECE;servicemanager&#x83B7;&#x53D6;&#x7684;&#x5230;&#x670D;&#x52A1;&#x7684;sptr<iremoteobject>&#x5BF9;&#x8C61;&#xFF0C;&#x5411;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x8F6C;&#x6362;&#x65F6;&#xFF0C;&#x8981;&#x4F7F;&#x7528;HDI&#x7684;&#x8F6C;&#x6362;&#x63A5;&#x53E3;<code>hdi_facecast</code></iremoteobject></li>
</ol>
<h4 class="mume-header" id="%E6%9C%8D%E5%8A%A1%E7%AB%AF">&#x670D;&#x52A1;&#x7AEF;</h4>

<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="810px" preserveAspectRatio="none" style="width:554px;height:810px;background:#FFFFFF;" version="1.1" viewBox="0 0 554 810" width="554px" zoomAndPan="magnify"><defs/><g><!--MD5=[3d5a8c1da44c46ddc545ce05907f84a6]
class HdiBase--><rect codeline="2" fill="#FEFECE" height="48" id="HdiBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="374.5" y="140.5"/><ellipse cx="389.5" cy="156.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M392.4688,162.1406 Q391.8906,162.4375 391.25,162.5781 Q390.6094,162.7344 389.9063,162.7344 Q387.4063,162.7344 386.0781,161.0938 Q384.7656,159.4375 384.7656,156.3125 Q384.7656,153.1875 386.0781,151.5313 Q387.4063,149.875 389.9063,149.875 Q390.6094,149.875 391.25,150.0313 Q391.9063,150.1875 392.4688,150.4844 L392.4688,153.2031 Q391.8438,152.625 391.25,152.3594 Q390.6563,152.0781 390.0313,152.0781 Q388.6875,152.0781 388,153.1563 Q387.3125,154.2188 387.3125,156.3125 Q387.3125,158.4063 388,159.4844 Q388.6875,160.5469 390.0313,160.5469 Q390.6563,160.5469 391.25,160.2813 Q391.8438,160 392.4688,159.4219 L392.4688,162.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="403.5" y="160.6543">HdiBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="375.5" x2="456.5" y1="172.5" y2="172.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="375.5" x2="456.5" y1="180.5" y2="180.5"/><!--MD5=[71f39f61a23ac5167baf05263fdb75ba]
class ObjectMapper--><rect codeline="4" fill="#FEFECE" height="99.2188" id="ObjectMapper" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="163" x="176.5" y="115"/><ellipse cx="211.3" cy="131" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M214.2688,136.6406 Q213.6906,136.9375 213.05,137.0781 Q212.4094,137.2344 211.7063,137.2344 Q209.2063,137.2344 207.8781,135.5938 Q206.5656,133.9375 206.5656,130.8125 Q206.5656,127.6875 207.8781,126.0313 Q209.2063,124.375 211.7063,124.375 Q212.4094,124.375 213.05,124.5313 Q213.7063,124.6875 214.2688,124.9844 L214.2688,127.7031 Q213.6438,127.125 213.05,126.8594 Q212.4563,126.5781 211.8313,126.5781 Q210.4875,126.5781 209.8,127.6563 Q209.1125,128.7188 209.1125,130.8125 Q209.1125,132.9063 209.8,133.9844 Q210.4875,135.0469 211.8313,135.0469 Q212.4563,135.0469 213.05,134.7813 Q213.6438,134.5 214.2688,133.9219 L214.2688,136.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="87" x="229.7" y="135.1543">ObjectMapper</text><line style="stroke:#A80036;stroke-width:1.5;" x1="177.5" x2="338.5" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="177.5" x2="338.5" y1="155" y2="155"/><ellipse cx="187.5" cy="166" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="122" x="196.5" y="169.2104">RegisterConstructor()</text><ellipse cx="187.5" cy="178.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="137" x="196.5" y="182.0151">UnRegisterConstructor()</text><ellipse cx="187.5" cy="191.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="102" x="196.5" y="194.8198">GetOrNewObject()</text><ellipse cx="187.5" cy="204.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="93" x="196.5" y="207.6245">RemoveObject();</text><!--MD5=[58a847b6583fafef963d0cee49e9c7a4]
class ObjectDelegator--><rect codeline="10" fill="#FEFECE" height="48" id="ObjectDelegator" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="134" x="7" y="140.5"/><ellipse cx="22" cy="156.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M24.9688,162.1406 Q24.3906,162.4375 23.75,162.5781 Q23.1094,162.7344 22.4063,162.7344 Q19.9063,162.7344 18.5781,161.0938 Q17.2656,159.4375 17.2656,156.3125 Q17.2656,153.1875 18.5781,151.5313 Q19.9063,149.875 22.4063,149.875 Q23.1094,149.875 23.75,150.0313 Q24.4063,150.1875 24.9688,150.4844 L24.9688,153.2031 Q24.3438,152.625 23.75,152.3594 Q23.1563,152.0781 22.5313,152.0781 Q21.1875,152.0781 20.5,153.1563 Q19.8125,154.2188 19.8125,156.3125 Q19.8125,158.4063 20.5,159.4844 Q21.1875,160.5469 22.5313,160.5469 Q23.1563,160.5469 23.75,160.2813 Q24.3438,160 24.9688,159.4219 L24.9688,162.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="102" x="36" y="160.6543">ObjectDelegator</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="140" y1="172.5" y2="172.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="140" y1="180.5" y2="180.5"/><!--MD5=[5d3ef477e9ed013ebb01b7ef92565625]
class RefBase--><rect codeline="12" fill="#FEFECE" height="48" id="RefBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="374.5" y="7"/><ellipse cx="389.5" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M392.4688,28.6406 Q391.8906,28.9375 391.25,29.0781 Q390.6094,29.2344 389.9063,29.2344 Q387.4063,29.2344 386.0781,27.5938 Q384.7656,25.9375 384.7656,22.8125 Q384.7656,19.6875 386.0781,18.0313 Q387.4063,16.375 389.9063,16.375 Q390.6094,16.375 391.25,16.5313 Q391.9063,16.6875 392.4688,16.9844 L392.4688,19.7031 Q391.8438,19.125 391.25,18.8594 Q390.6563,18.5781 390.0313,18.5781 Q388.6875,18.5781 388,19.6563 Q387.3125,20.7188 387.3125,22.8125 Q387.3125,24.9063 388,25.9844 Q388.6875,27.0469 390.0313,27.0469 Q390.6563,27.0469 391.25,26.7813 Q391.8438,26.5 392.4688,25.9219 L392.4688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="403.5" y="27.1543">RefBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="375.5" x2="456.5" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="375.5" x2="456.5" y1="47" y2="47"/><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="14" fill="#FEFECE" height="99.2188" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="156" x="331" y="274"/><ellipse cx="391.25" cy="290" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M387.1719,285.7656 L387.1719,283.6094 L394.5625,283.6094 L394.5625,285.7656 L392.0938,285.7656 L392.0938,293.8438 L394.5625,293.8438 L394.5625,296 L387.1719,296 L387.1719,293.8438 L389.6406,293.8438 L389.6406,285.7656 L387.1719,285.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="411.75" y="294.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="332" x2="486" y1="306" y2="306"/><line style="stroke:#A80036;stroke-width:1.5;" x1="332" x2="486" y1="314" y2="314"/><ellipse cx="342" cy="325" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="92" x="351" y="328.2104">Get(bool isStub)</text><ellipse cx="342" cy="337.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="130" x="351" y="341.0151">Get(servName, isStub)</text><ellipse cx="342" cy="350.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="87" x="351" y="353.8198">GetDescriptor()</text><ellipse cx="342" cy="363.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" font-style="italic" lengthAdjust="spacing" textLength="28" x="351" y="366.6245">Foo()</text><!--MD5=[dd82cabe89ad165c6fa0c3e43ad78fa1]
class FooStub--><rect codeline="20" fill="#FEFECE" height="99.2188" id="FooStub" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="156" x="47" y="274"/><ellipse cx="94.75" cy="290" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M97.7188,295.6406 Q97.1406,295.9375 96.5,296.0781 Q95.8594,296.2344 95.1563,296.2344 Q92.6563,296.2344 91.3281,294.5938 Q90.0156,292.9375 90.0156,289.8125 Q90.0156,286.6875 91.3281,285.0313 Q92.6563,283.375 95.1563,283.375 Q95.8594,283.375 96.5,283.5313 Q97.1563,283.6875 97.7188,283.9844 L97.7188,286.7031 Q97.0938,286.125 96.5,285.8594 Q95.9063,285.5781 95.2813,285.5781 Q93.9375,285.5781 93.25,286.6563 Q92.5625,287.7188 92.5625,289.8125 Q92.5625,291.9063 93.25,292.9844 Q93.9375,294.0469 95.2813,294.0469 Q95.9063,294.0469 96.5,293.7813 Q97.0938,293.5 97.7188,292.9219 L97.7188,295.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="52" x="115.25" y="294.1543">FooStub</text><line style="stroke:#A80036;stroke-width:1.5;" x1="48" x2="202" y1="306" y2="306"/><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1.0;" width="6" x="55" y="314"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="91" x="67" y="320.2104">ObjectDelegator</text><rect fill="none" height="6" style="stroke:#C82930;stroke-width:1.0;" width="6" x="55" y="326.8047"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="67" y="333.0151">IFoo impl</text><line style="stroke:#A80036;stroke-width:1.5;" x1="48" x2="202" y1="339.6094" y2="339.6094"/><ellipse cx="58" cy="350.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="113" x="67" y="353.8198">OnRemoteRequest()</text><ellipse cx="58" cy="363.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="130" x="67" y="366.6245">FooStubDoSomething()</text><!--MD5=[439980ff4e316fcea7eb434b1c1f4104]
class FooService--><rect codeline="27" fill="#FEFECE" height="73.6094" id="FooService" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="225" x="161.5" y="433"/><ellipse cx="235.75" cy="449" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M238.7188,454.6406 Q238.1406,454.9375 237.5,455.0781 Q236.8594,455.2344 236.1563,455.2344 Q233.6563,455.2344 232.3281,453.5938 Q231.0156,451.9375 231.0156,448.8125 Q231.0156,445.6875 232.3281,444.0313 Q233.6563,442.375 236.1563,442.375 Q236.8594,442.375 237.5,442.5313 Q238.1563,442.6875 238.7188,442.9844 L238.7188,445.7031 Q238.0938,445.125 237.5,444.8594 Q236.9063,444.5781 236.2813,444.5781 Q234.9375,444.5781 234.25,445.6563 Q233.5625,446.7188 233.5625,448.8125 Q233.5625,450.9063 234.25,451.9844 Q234.9375,453.0469 236.2813,453.0469 Q236.9063,453.0469 237.5,452.7813 Q238.0938,452.5 238.7188,451.9219 L238.7188,454.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="256.25" y="453.1543">FooService</text><line style="stroke:#A80036;stroke-width:1.5;" x1="162.5" x2="385.5" y1="465" y2="465"/><line style="stroke:#A80036;stroke-width:1.5;" x1="162.5" x2="385.5" y1="473" y2="473"/><ellipse cx="172.5" cy="484" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="199" x="181.5" y="487.2104">ISample *SampleImplGetInstance()</text><ellipse cx="172.5" cy="496.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="181.5" y="500.0151">Foo()</text><!--MD5=[ebfce64199542a9c45eae0853c3cc247]
class FooDriver--><rect codeline="31" fill="#FEFECE" height="86.4141" id="FooDriver" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="127" x="126.5" y="583"/><ellipse cx="157.7" cy="599" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M160.6688,604.6406 Q160.0906,604.9375 159.45,605.0781 Q158.8094,605.2344 158.1063,605.2344 Q155.6063,605.2344 154.2781,603.5938 Q152.9656,601.9375 152.9656,598.8125 Q152.9656,595.6875 154.2781,594.0313 Q155.6063,592.375 158.1063,592.375 Q158.8094,592.375 159.45,592.5313 Q160.1063,592.6875 160.6688,592.9844 L160.6688,595.7031 Q160.0438,595.125 159.45,594.8594 Q158.8563,594.5781 158.2313,594.5781 Q156.8875,594.5781 156.2,595.6563 Q155.5125,596.7188 155.5125,598.8125 Q155.5125,600.9063 156.2,601.9844 Q156.8875,603.0469 158.2313,603.0469 Q158.8563,603.0469 159.45,602.7813 Q160.0438,602.5 160.6688,601.9219 L160.6688,604.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="59" x="175.3" y="603.1543">FooDriver</text><line style="stroke:#A80036;stroke-width:1.5;" x1="127.5" x2="252.5" y1="615" y2="615"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="115" x="132.5" y="629.2104">HdfDriverEntry entry</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="111" x="132.5" y="642.0151">FooStub stubObject</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="110" x="132.5" y="654.8198">sptr&lt;IFoo&gt; fooImpl</text><line style="stroke:#A80036;stroke-width:1.5;" x1="127.5" x2="252.5" y1="661.4141" y2="661.4141"/><path d="M296.5,567 L296.5,590.6992 L243.5,638.207 L296.5,598.6992 L296.5,622.3984 A0,0 0 0 0 296.5,622.3984 L547.5,622.3984 A0,0 0 0 0 547.5,622.3984 L547.5,577 L537.5,567 L296.5,567 A0,0 0 0 0 296.5,567 " fill="#7FFFD4" style="stroke:#7FFFD4;stroke-width:1.0;"/><path d="M537.5,567 L537.5,577 L547.5,577 L537.5,567 " fill="#7FFFD4" style="stroke:#7FFFD4;stroke-width:1.0;"/><text fill="#454645" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="302.5" y="584.0669">Use</text><text fill="#454645" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="230" x="302.5" y="599.1997">ObjectMapper.GetOrNewObject bind</text><text fill="#454645" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="176" x="302.5" y="614.3325">FooService with Stub object</text><path d="M296.5,632.3984 L296.5,648.5313 L242.5,651.0117 L296.5,656.5313 L296.5,672.6641 A0,0 0 0 0 296.5,672.6641 L514.5,672.6641 A0,0 0 0 0 514.5,672.6641 L514.5,642.3984 L504.5,632.3984 L296.5,632.3984 A0,0 0 0 0 296.5,632.3984 " fill="#7FFFD4" style="stroke:#7FFFD4;stroke-width:1.0;"/><path d="M504.5,632.3984 L504.5,642.3984 L514.5,642.3984 L504.5,632.3984 " fill="#7FFFD4" style="stroke:#7FFFD4;stroke-width:1.0;"/><text fill="#454645" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="197" x="302.5" y="649.4653">Use HdiLoader function to load</text><text fill="#454645" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="128" x="302.5" y="664.5981">FooService instance</text><!--MD5=[c1e79708e4c860e7445cc22a3456fc7f]
class HdiLoader--><rect codeline="48" fill="#FEFECE" height="60.8047" id="HdiLoader" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="103" x="138.5" y="743"/><ellipse cx="157.1" cy="759" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M160.0688,764.6406 Q159.4906,764.9375 158.85,765.0781 Q158.2094,765.2344 157.5063,765.2344 Q155.0063,765.2344 153.6781,763.5938 Q152.3656,761.9375 152.3656,758.8125 Q152.3656,755.6875 153.6781,754.0313 Q155.0063,752.375 157.5063,752.375 Q158.2094,752.375 158.85,752.5313 Q159.5063,752.6875 160.0688,752.9844 L160.0688,755.7031 Q159.4438,755.125 158.85,754.8594 Q158.2563,754.5781 157.6313,754.5781 Q156.2875,754.5781 155.6,755.6563 Q154.9125,756.7188 154.9125,758.8125 Q154.9125,760.9063 155.6,761.9844 Q156.2875,763.0469 157.6313,763.0469 Q158.2563,763.0469 158.85,762.7813 Q159.4438,762.5 160.0688,761.9219 L160.0688,764.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="171.9" y="763.1543">HdiLoader</text><line style="stroke:#A80036;stroke-width:1.5;" x1="139.5" x2="240.5" y1="775" y2="775"/><line style="stroke:#A80036;stroke-width:1.5;" x1="139.5" x2="240.5" y1="783" y2="783"/><ellipse cx="149.5" cy="794" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="77" x="158.5" y="797.2104">LoadHdiImpl()</text><!--MD5=[2b803f1c25ce549030956b4685afc52a]
link FooDriver to FooDriver$$$RIGHT--><!--MD5=[47eceadc436a5175bf90f3cf8fc075e1]
reverse link RefBase to HdiBase--><path codeline="51" d="M416,60.43 C416,84.24 416,117.8 416,140.08 " fill="none" id="RefBase-backto-HdiBase" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="416,55.21,412,64.21,416,60.21,420,64.21,416,55.21" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[a19457632ee0d013a549908270ea450a]
reverse link HdiBase to IFoo--><path codeline="52" d="M414.74,193.84 C413.74,216.1 412.34,247.64 411.17,273.92 " fill="none" id="HdiBase-backto-IFoo" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="414.97,188.67,410.562,197.4774,414.741,193.6648,418.5536,197.8437,414.97,188.67" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[2927f5cdd9f4afb420e871007ac4508c]
reverse link IFoo to FooService--><path codeline="53" d="M349.64,388.04 C335.35,403.34 320.56,419.16 307.89,432.72 " fill="none" id="IFoo-backto-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="344.9,382.85,363.67,373.02,355.13,392.41,344.9,382.85" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[da5255adef7008f710f2a56746025c40]
link FooStub to FooService--><path codeline="54" d="M175.03,373.02 C191.85,389.33 210.54,407.46 227.11,423.53 " fill="none" id="FooStub-to-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="236.59,432.72,235.0662,425.6717,227.974,424.3675,229.4978,431.4157,236.59,432.72" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="173.7907" y="393.4554">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="221.2138" y="421.8571">1</text><!--MD5=[5a3cd0b3694ffa7fc95d11c9e8963b70]
reverse link ObjectDelegator to FooStub--><path codeline="55" d="M85.59,201.17 C92.58,222.7 101.58,250.41 109.22,273.92 " fill="none" id="ObjectDelegator-backto-FooStub" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="81.53,188.67,79.5844,195.6137,85.2456,200.0803,87.1912,193.1366,81.53,188.67" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="74.3904" y="208.4726">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="98.4384" y="262.954">1</text><!--MD5=[1d65f8f24ab7fe350e2fc47f437f71d1]
reverse link FooStub to FooDriver--><path codeline="57" d="M101.18,385.68 C69.04,476.66 26.51,637 126,637 " fill="none" id="FooStub-backto-FooDriver" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="105.62,373.33,99.8248,377.6214,101.5572,384.6213,107.3524,380.3299,105.62,373.33" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="94.3322" y="393.4529">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="110.5625" y="634.4343">1</text><!--MD5=[6b0ac3bc5b6e59f4ce9e41c6e76c6a40]
link FooDriver to HdiLoader--><path codeline="59" d="M190,671.15 C190,694.52 190,722.39 190,742.99 " fill="none" id="FooDriver-HdiLoader" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[9f3aa244e8d593dcffb0aecbf4e913d6]
reverse link FooService to FooDriver--><path codeline="60" d="M273.42,520.18 C272.13,572.86 268.01,649 255,649 " fill="none" id="FooService-backto-FooDriver" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="273.7,507.02,269.5755,512.9351,273.4492,519.0174,277.5737,513.1023,273.7,507.02" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="264.9609" y="526.7838">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="261.5766" y="647.5308">1</text><!--MD5=[088f8cdebd6b07f17644f3c41fb9acad]
link ObjectMapper to FooStub--><path codeline="63" d="M216.65,214.32 C203.32,230.04 188.42,247.64 174.57,263.99 " fill="none" id="ObjectMapper-to-FooStub" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="166.1,273.98,173.0322,271.9937,173.8649,264.8309,166.9327,266.8171,166.1,273.98" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="202.2727" y="234.4415">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="163.3172" y="263.0224">n</text><!--MD5=[848801947c93e04eaf94d5435fe3441b]
link ObjectMapper to FooService--><path codeline="64" d="M260.57,214.26 C263.54,270.61 268.4,362.83 271.39,419.49 " fill="none" id="ObjectMapper-to-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#FFFFFF" points="272.09,432.74,275.768,426.5374,271.4572,420.7567,267.7792,426.9593,272.09,432.74" style="stroke:#454645;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="252.3689" y="234.373">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="8" x="263.0373" y="421.8806">n</text><!--MD5=[ed78097c8a98d86b5cd3e7acc8740777]
@startuml
!theme vibrant
    class HdiBase {
    }
    class ObjectMapper {
        + RegisterConstructor()
        + UnRegisterConstructor()
        + GetOrNewObject()
        + RemoveObject();
    }
    class ObjectDelegator {
    }
    class RefBase {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }
    class FooStub {
        + OnRemoteRequest()
        + FooStubDoSomething()
        - {static} ObjectDelegator
        - IFoo impl
    }

    class FooService {
        + {static} ISample *SampleImplGetInstance()
        + Foo()
    }
    class FooDriver {
        HdfDriverEntry entry
        FooStub stubObject
        sptr<IFoo> fooImpl
    }

    note right of FooDriver::stubObject
    Use
    ObjectMapper.GetOrNewObject bind
    FooService with Stub object
    end note

    note right of FooDriver::fooImpl
    Use HdiLoader function to load
    FooService instance
    end note

    class HdiLoader {
        + LoadHdiImpl()
    }
    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <|- -  FooService
    FooStub "1" - -o "1" FooService
    ObjectDelegator "1" *- - "1" FooStub

    FooStub "1" *- - "1" FooDriver::stubObject

    FooDriver - - HdiLoader
    FooService "1" *- - "1" FooDriver::fooImpl


    ObjectMapper "1" - -o "n" FooStub
    ObjectMapper "1" - -o "n" FooService
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
    class HdiBase {
    }
    class ObjectMapper {
        + RegisterConstructor()
        + UnRegisterConstructor()
        + GetOrNewObject()
        + RemoveObject();
    }
    class ObjectDelegator {
    }
    class RefBase {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }
    class FooStub {
        + OnRemoteRequest()
        + FooStubDoSomething()
        - {static} ObjectDelegator
        - IFoo impl
    }

    class FooService {
        + {static} ISample *SampleImplGetInstance()
        + Foo()
    }
    class FooDriver {
        HdfDriverEntry entry
        FooStub stubObject
        sptr<IFoo> fooImpl
    }

    note right of FooDriver::stubObject
    Use
    ObjectMapper.GetOrNewObject bind
    FooService with Stub object
    end note

    note right of FooDriver::fooImpl
    Use HdiLoader function to load
    FooService instance
    end note

    class HdiLoader {
        + LoadHdiImpl()
    }
    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <|- -  FooService
    FooStub "1" - -o "1" FooService
    ObjectDelegator "1" *- - "1" FooStub

    FooStub "1" *- - "1" FooDriver::stubObject

    FooDriver - - HdiLoader
    FooService "1" *- - "1" FooDriver::fooImpl


    ObjectMapper "1" - -o "n" FooStub
    ObjectMapper "1" - -o "n" FooService
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><ul>
<li><code>FooService</code>&#x76F4;&#x63A5;&#x5B9E;&#x73B0;<code>IFoo</code>, <code>IFoo</code>&#x4E0D;&#x7EE7;&#x627F;<code>IRemoteBroker</code></li>
<li>&#x91CD;&#x6784;<code>FooStub</code>&#x4E0E;<code>FooService</code>&#x4E3A;&#x7EC4;&#x5408;&#x5173;&#x7CFB;&#xFF0C;&#x7531;<code>FooStub</code>&#x6784;&#x9020;&#x51FD;&#x6570;&#x4E2D;&#x7ED1;&#x5B9A;<code>FooService</code>&#x5B9E;&#x4F8B;&#x3002;</li>
<li>&#x5728;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x4F20;&#x8F93;&#x7684;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x5F00;&#x53D1;&#x8005;&#x53EA;&#x5B9E;&#x73B0;Interface&#xFF0C;&#x4E3A;&#x4E86;&#x5728;&#x5E8F;&#x5217;&#x5316;&#x65F6;&#x4FDD;&#x8BC1;&#x552F;&#x4E00;&#x7684;Interface&#x5BF9;&#x8C61;&#x4E0E;Stub&#x7ED1;&#x5B9A;&#x5173;&#x7CFB;&#xFF0C;&#x5B9E;&#x73B0;<code>IFoo</code>(<code>FooService</code>&#x5B9E;&#x4F8B;)&#x53CD;&#x5411;&#x83B7;&#x53D6;stub&#x5BF9;&#x8C61;&#x5E76;&#x8FDB;&#x4E00;&#x6B65;&#x83B7;&#x53D6;&#x5230;binder&#x5BF9;&#x8C61;&#xFF0C;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;map&#x7EF4;&#x62A4;&#x63A5;&#x53E3;&#x5B9E;&#x73B0;&#x548C;stub&#x5BF9;&#x8C61;&#x7684;&#x5173;&#x8054;&#xFF0C;&#x5728;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x53D1;&#x9001;&#x65F6;&#x8FDB;&#x884C;&#x7ED1;&#x5B9A;&#x3001;&#x521B;&#x5EFA;stub&#x5BF9;&#x8C61;&#xFF0C;&#x8FD9;&#x4E00;&#x70B9;&#x4E0E;&#x5728;driver&#x4E2D;&#x5B9E;&#x4F8B;&#x5316;stub&#x6709;&#x6240;&#x4E0D;&#x540C;&#x3002;</li>
<li><code>FooService</code>&#x5B9E;&#x73B0;&#x5E93;&#x7531;HdiLoader&#x6A21;&#x5757;&#x8FDB;&#x884C;&#x52A8;&#x6001;&#x52A0;&#x8F7D;&#xFF0C;&#x5E76;&#x901A;&#x8FC7;&#x670D;&#x52A1;&#x5B9E;&#x4F8B;&#x5316;&#x63A5;&#x53E3; <code>IFoo *FooServiceIGetInstance(void)</code>&#x5B9E;&#x4F8B;&#x5316;&#x670D;&#x52A1;</li>
<li><code>FooDriver</code>&#x4E2D;&#x9996;&#x5148;&#x901A;&#x8FC7;HdiLoader&#x52A0;&#x8F7D;&#x670D;&#x52A1;&#x5B9E;&#x4F8B;&#xFF0C;&#x7136;&#x540E;&#x901A;&#x8FC7;ObjectMapper&#x83B7;&#x53D6;FooService&#x5BF9;&#x5E94;&#x7684;FooStub&#x5B9E;&#x4F8B;&#xFF0C;<code>FooStub</code>&#xFF0C;&#x5728;<code>Dispatch</code>&#x56DE;&#x8C03;&#x4E2D;&#x5C06;&#x6D88;&#x606F;&#x6D3E;&#x53D1;&#x5230;<code>FooStub</code>&#x7684;<code>OnRemoteRequest</code>&#x63A5;&#x53E3;</li>
<li>&#x670D;&#x52A1;&#x5B9E;&#x73B0;&#x5E93;&#x5FC5;&#x987B;&#x9075;&#x5FAA;<code>foo_impl_v1_0</code>&#x7684;&#x547D;&#x540D;&#x89C4;&#x5219;&#x624D;&#x80FD;&#x88AB;<code>FooStub</code>&#x52A0;&#x8F7D;</li>
</ul>
<p>&#x4E3B;&#x8981;&#x6D41;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="626px" preserveAspectRatio="none" style="width:1209px;height:626px;background:#FFFFFF;" version="1.1" viewBox="0 0 1209 626" width="1209px" zoomAndPan="magnify"><defs><filter height="300%" id="f1no0z1dktkmz3" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="26" x2="26" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="124.5" x2="124.5" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="350.5" x2="350.5" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="595" x2="595" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="840.5" x2="840.5" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="1066" x2="1066" y1="88.2969" y2="542.1563"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="1161" x2="1161" y1="88.2969" y2="542.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="84.9951">Actor</text><ellipse cx="26" cy="15" fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,23 L26,50 M13,31 L39,31 M26,50 L13,65 M26,50 L39,65 " fill="none" filter="url(#f1no0z1dktkmz3)" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="554.1514">Actor</text><ellipse cx="26" cy="567.4531" fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,575.4531 L26,602.4531 M13,583.4531 L39,583.4531 M26,602.4531 L13,617.4531 M26,602.4531 L39,617.4531 " fill="none" filter="url(#f1no0z1dktkmz3)" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="127" x="59.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="113" x="66.5" y="72.9951">ObjectDelegator</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="127" x="59.5" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="113" x="66.5" y="561.1514">ObjectDelegator</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="111" x="293.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="300.5" y="72.9951">ObjectMapper</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="111" x="293.5" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="97" x="300.5" y="561.1514">ObjectMapper</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="80" x="553" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="66" x="560" y="72.9951">FooDriver</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="80" x="553" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="66" x="560" y="561.1514">FooDriver</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="797.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="804.5" y="72.9951">HdiLoader</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="797.5" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="804.5" y="561.1514">HdiLoader</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="1019" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="1026" y="72.9951">FooService</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="1019" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="1026" y="561.1514">FooService</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="1123" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="1130" y="72.9951">FooStub</text><rect fill="#FEFECE" filter="url(#f1no0z1dktkmz3)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="1123" y="541.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="1130" y="561.1514">FooStub</text><polygon fill="#A80036" points="113,115.4297,123,119.4297,113,123.4297,117,119.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="119" y1="119.4297" y2="119.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="75" x="33" y="114.3638">Constructor</text><polygon fill="#A80036" points="339,144.5625,349,148.5625,339,152.5625,343,148.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="125" x2="345" y1="148.5625" y2="148.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="202" x="132" y="143.4966">RegisterConstructor&lt;FooStub&gt;</text><polygon fill="#A80036" points="583,173.6953,593,177.6953,583,181.6953,587,177.6953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="589" y1="177.6953" y2="177.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31" x="33" y="172.6294">Load</text><polygon fill="#A80036" points="829,202.8281,839,206.8281,829,210.8281,833,206.8281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="595" x2="835" y1="206.8281" y2="206.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="222" x="602" y="201.7622">LoadHdiImpl(IFoo::GetDescriptor())</text><line style="stroke:#A80036;stroke-width:1.0;" x1="841" x2="883" y1="235.9609" y2="235.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="883" x2="883" y1="235.9609" y2="248.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="842" x2="883" y1="248.9609" y2="248.9609"/><polygon fill="#A80036" points="852,244.9609,842,248.9609,852,252.9609,848,248.9609" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="848" y="230.895">dlopen(&quot;libsample_stub_1.0&quot;)</text><line style="stroke:#A80036;stroke-width:1.0;" x1="841" x2="883" y1="278.0938" y2="278.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="883" x2="883" y1="278.0938" y2="291.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="842" x2="883" y1="291.0938" y2="291.0938"/><polygon fill="#A80036" points="852,287.0938,842,291.0938,852,295.0938,848,291.0938" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="211" x="848" y="273.0278">dlsym(&quot;SampleImplGetInstance&quot;)</text><polygon fill="#A80036" points="1054,316.2266,1064,320.2266,1054,324.2266,1058,320.2266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="841" x2="1060" y1="320.2266" y2="320.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="848" y="315.1606">new</text><polygon fill="#A80036" points="606,345.3594,596,349.3594,606,353.3594,602,349.3594" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="600" x2="840" y1="349.3594" y2="349.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="175" x="612" y="344.2935">FooService *fooServiceImpl</text><polygon fill="#A80036" points="362,374.4922,352,378.4922,362,382.4922,358,378.4922" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="356" x2="594" y1="378.4922" y2="378.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="220" x="368" y="373.4263">GetOrNewObject(IFoo* fooService)</text><polygon fill="#A80036" points="1149,403.625,1159,407.625,1149,411.625,1153,407.625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="351" x2="1155" y1="407.625" y2="407.625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="358" y="402.5591">new</text><polygon fill="#A80036" points="583,432.7578,593,436.7578,583,440.7578,587,436.7578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="351" x2="589" y1="436.7578" y2="436.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="214" x="358" y="431.6919">sptr&lt;IRemoteObject&gt; stubObject</text><polygon fill="#A80036" points="583,461.8906,593,465.8906,583,469.8906,587,465.8906" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="589" y1="465.8906" y2="465.8906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="43" x="33" y="460.8247">APICall</text><polygon fill="#A80036" points="1149,491.0234,1159,495.0234,1149,499.0234,1153,495.0234" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="595" x2="1155" y1="495.0234" y2="495.0234"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="120" x="602" y="489.9575">OnRemoteRequest</text><polygon fill="#A80036" points="1077,520.1563,1067,524.1563,1077,528.1563,1073,524.1563" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="1071" x2="1160" y1="524.1563" y2="524.1563"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="53" x="1083" y="519.0903">FuncCall</text><!--MD5=[a7f1f5f504d0fff516c273b179f8bb3f]
@startuml
actor       Actor       as actor
actor -> ObjectDelegator : Constructor
ObjectDelegator -> ObjectMapper :RegisterConstructor<FooStub>
actor -> FooDriver : Load
FooDriver -> HdiLoader : LoadHdiImpl(IFoo::GetDescriptor())
HdiLoader -> HdiLoader : dlopen("libsample_stub_1.0")
HdiLoader -> HdiLoader : dlsym("SampleImplGetInstance")
HdiLoader -> FooService : new
HdiLoader - -> FooDriver : FooService *fooServiceImpl
FooDriver -> ObjectMapper : GetOrNewObject(IFoo* fooService)
ObjectMapper -> FooStub : new
ObjectMapper - -> FooDriver : sptr<IRemoteObject> stubObject

actor -> FooDriver : APICall
FooDriver -> FooStub : OnRemoteRequest
FooStub -> FooService : FuncCall
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p><strong>&#x7279;&#x522B;&#x6CE8;&#x610F;</strong>&#xFF1A;</p>
<ol>
<li><code>FooStub</code>&#x8981;&#x4F7F;&#x7528;<code>static inline</code>&#x6210;&#x5458;&#x53D8;&#x91CF;<code>static inline ObjectDelegator&lt;FooStub, IFoo&gt; objDelegator_</code>&#x5C06;&#x6784;&#x9020;&#x51FD;&#x6570;&#x6CE8;&#x518C;&#x5230;HDI&#x6846;&#x67B6;&#x7684;<code>ObjectMapper</code>&#xFF0C;&#x7528;&#x4E8E;&#x4E3A;&#x670D;&#x52A1;&#x5BF9;&#x8C61;&#x52A8;&#x6001;&#x7ED1;&#x5B9A;stub&#x5BF9;&#x8C61;&#xFF0C;&#x8FD9;&#x4E0E;proxy&#x5BF9;&#x8C61;&#x6709;&#x6240;&#x5DEE;&#x5F02;&#x3002;</li>
<li>&#x5728;&#x8C03;&#x7528;<code>ObjectMapper.GetOrNewObject</code>&#x83B7;&#x53D6;<code>FooService</code>&#x5B9E;&#x4F8B;&#x5BF9;&#x5E94;&#x7684;Stub&#x5BF9;&#x8C61;&#x540E;&#xFF0C;<code>FooService</code>&#x4E0E;<code>FooStub</code>&#x5728;<code>ObjectMapper</code>&#x4E2D;&#x5EFA;&#x7ACB;&#x4E86;&#x5173;&#x8054;&#x7F13;&#x5B58;&#xFF0C;&#x8981;&#x5728;<code>FooStub</code>&#x5BF9;&#x8C61;&#x7684;&#x6790;&#x6784;&#x51FD;&#x6570;&#x4E2D;&#x5BF9;&#x7F13;&#x5B58;&#x8FDB;&#x884C;&#x6E05;&#x7A7A;&#xFF0C;&#x4E0D;&#x7136;&#x4F1A;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x3002;</li>
</ol>
<h4 class="mume-header" id="passthrough">Passthrough</h4>

<p>&#x901A;&#x8FC7;&#x4E0A;&#x9762;&#x7684;&#x8BBE;&#x8BA1;&#x5DE5;&#x4F5C;&#xFF0C;&#x5B9E;&#x73B0;passthrough&#x5C06;&#x53D8;&#x5F97;&#x7B80;&#x5355;&#xFF1A;</p>
<ul>
<li>passthrough&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x4ECD;&#x7136;&#x4FDD;&#x7559;client&#x5E93;&#xFF0C;&#x53EF;&#x4EE5;&#x5BF9;IPC&#x76F8;&#x5173;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x6D88;&#x9664;&#xFF08;&#x53EF;&#x9009;&#xFF09;</li>
<li>&#x5728;IFoo&#x63A5;&#x53E3;&#x4E2D;&#x589E;&#x52A0;&#x9ED8;&#x8BA4;&#x63A5;&#x53E3; <code>GetService(bool isStub = false)</code>, &#x5F53;&#x5165;&#x53C2;&#x4E3A;<code>true</code>&#x76F4;&#x63A5;&#x8C03;&#x7528;<code>HdiLoader</code>&#x52A0;&#x8F7D;&#x670D;&#x52A1;&#x5B9E;&#x73B0;&#x5E76;&#x8FD4;&#x56DE;<code>IFoo</code>&#x5BF9;&#x8C61;&#x5B9E;&#x73B0;&#xFF0C;&#x5B8C;&#x6210;passthrough&#x52A0;&#x8F7D;&#xFF1B;&#x5165;&#x53C2;&#x4E3A;<code>false</code>&#x65F6;&#x901A;&#x8FC7;<code>HdiServiceManager</code>&#x83B7;&#x53D6;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;</li>
<li>L1&#x90E8;&#x7F72;&#x6E05;&#x7A7A;&#x4E0B;&#xFF0C;&#x4E3A;&#x4E86;&#x7EDF;&#x4E00;&#x548C;L2&#x7684;&#x4F7F;&#x7528;&#xFF0C;&#x4E5F;&#x4FDD;&#x7559;client&#x5E93;&#xFF0C;<code>IFoo:Get</code>&#x63A5;&#x53E3;&#x4E2D;<code>isStub</code>&#x53C2;&#x6570;&#x9ED8;&#x8BA4;&#x4E3A;<code>true</code>&#xFF0C;&#x4F20;<code>false</code>&#x65F6;&#x8FD4;&#x56DE;&#x5931;&#x8D25;&#xFF08;L1&#x4E0D;&#x652F;&#x6301;ipc&#x6A21;&#x5F0F;&#xFF0C;HDI&#x6846;&#x67B6;&#x4E2D;ipc&#x76F8;&#x5173;&#x7684;&#x4EE3;&#x7801;&#x4E0D;&#x53C2;&#x4E0E;&#x7F16;&#x8BD1;&#xFF09;&#x3002;</li>
</ul>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="462px" preserveAspectRatio="none" style="width:377px;height:462px;background:#FFFFFF;" version="1.1" viewBox="0 0 377 462" width="377px" zoomAndPan="magnify"><defs/><g><!--MD5=[3d5a8c1da44c46ddc545ce05907f84a6]
class HdiBase--><rect codeline="2" fill="#FEFECE" height="48" id="HdiBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="177" y="115"/><ellipse cx="192" cy="131" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M194.9688,136.6406 Q194.3906,136.9375 193.75,137.0781 Q193.1094,137.2344 192.4063,137.2344 Q189.9063,137.2344 188.5781,135.5938 Q187.2656,133.9375 187.2656,130.8125 Q187.2656,127.6875 188.5781,126.0313 Q189.9063,124.375 192.4063,124.375 Q193.1094,124.375 193.75,124.5313 Q194.4063,124.6875 194.9688,124.9844 L194.9688,127.7031 Q194.3438,127.125 193.75,126.8594 Q193.1563,126.5781 192.5313,126.5781 Q191.1875,126.5781 190.5,127.6563 Q189.8125,128.7188 189.8125,130.8125 Q189.8125,132.9063 190.5,133.9844 Q191.1875,135.0469 192.5313,135.0469 Q193.1563,135.0469 193.75,134.7813 Q194.3438,134.5 194.9688,133.9219 L194.9688,136.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="206" y="135.1543">HdiBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="178" x2="259" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="178" x2="259" y1="155" y2="155"/><!--MD5=[5d3ef477e9ed013ebb01b7ef92565625]
class RefBase--><rect codeline="4" fill="#FEFECE" height="48" id="RefBase" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="83" x="177" y="7"/><ellipse cx="192" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M194.9688,28.6406 Q194.3906,28.9375 193.75,29.0781 Q193.1094,29.2344 192.4063,29.2344 Q189.9063,29.2344 188.5781,27.5938 Q187.2656,25.9375 187.2656,22.8125 Q187.2656,19.6875 188.5781,18.0313 Q189.9063,16.375 192.4063,16.375 Q193.1094,16.375 193.75,16.5313 Q194.4063,16.6875 194.9688,16.9844 L194.9688,19.7031 Q194.3438,19.125 193.75,18.8594 Q193.1563,18.5781 192.5313,18.5781 Q191.1875,18.5781 190.5,19.6563 Q189.8125,20.7188 189.8125,22.8125 Q189.8125,24.9063 190.5,25.9844 Q191.1875,27.0469 192.5313,27.0469 Q193.1563,27.0469 193.75,26.7813 Q194.3438,26.5 194.9688,25.9219 L194.9688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="51" x="206" y="27.1543">RefBase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="178" x2="259" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="178" x2="259" y1="47" y2="47"/><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="6" fill="#FEFECE" height="99.2188" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="156" x="140.5" y="223"/><ellipse cx="200.75" cy="239" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M196.6719,234.7656 L196.6719,232.6094 L204.0625,232.6094 L204.0625,234.7656 L201.5938,234.7656 L201.5938,242.8438 L204.0625,242.8438 L204.0625,245 L196.6719,245 L196.6719,242.8438 L199.1406,242.8438 L199.1406,234.7656 L196.6719,234.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="221.25" y="243.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="141.5" x2="295.5" y1="255" y2="255"/><line style="stroke:#A80036;stroke-width:1.5;" x1="141.5" x2="295.5" y1="263" y2="263"/><ellipse cx="151.5" cy="274" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="92" x="160.5" y="277.2104">Get(bool isStub)</text><ellipse cx="151.5" cy="286.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="130" x="160.5" y="290.0151">Get(servName, isStub)</text><ellipse cx="151.5" cy="299.6094" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="87" x="160.5" y="302.8198">GetDescriptor()</text><ellipse cx="151.5" cy="312.4141" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" font-style="italic" lengthAdjust="spacing" textLength="28" x="160.5" y="315.6245">Foo()</text><!--MD5=[439980ff4e316fcea7eb434b1c1f4104]
class FooService--><rect codeline="13" fill="#FEFECE" height="73.6094" id="FooService" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="225" x="7" y="382"/><ellipse cx="81.25" cy="398" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M84.2188,403.6406 Q83.6406,403.9375 83,404.0781 Q82.3594,404.2344 81.6563,404.2344 Q79.1563,404.2344 77.8281,402.5938 Q76.5156,400.9375 76.5156,397.8125 Q76.5156,394.6875 77.8281,393.0313 Q79.1563,391.375 81.6563,391.375 Q82.3594,391.375 83,391.5313 Q83.6563,391.6875 84.2188,391.9844 L84.2188,394.7031 Q83.5938,394.125 83,393.8594 Q82.4063,393.5781 81.7813,393.5781 Q80.4375,393.5781 79.75,394.6563 Q79.0625,395.7188 79.0625,397.8125 Q79.0625,399.9063 79.75,400.9844 Q80.4375,402.0469 81.7813,402.0469 Q82.4063,402.0469 83,401.7813 Q83.5938,401.5 84.2188,400.9219 L84.2188,403.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="101.75" y="402.1543">FooService</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="231" y1="414" y2="414"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="231" y1="422" y2="422"/><ellipse cx="18" cy="433" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" text-decoration="underline" textLength="199" x="27" y="436.2104">ISample *SampleImplGetInstance()</text><ellipse cx="18" cy="445.8047" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="27" y="449.0151">Foo()</text><!--MD5=[c1e79708e4c860e7445cc22a3456fc7f]
class HdiLoader--><rect codeline="18" fill="#FEFECE" height="60.8047" id="HdiLoader" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="103" x="267" y="388.5"/><ellipse cx="285.6" cy="404.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M288.5688,410.1406 Q287.9906,410.4375 287.35,410.5781 Q286.7094,410.7344 286.0063,410.7344 Q283.5063,410.7344 282.1781,409.0938 Q280.8656,407.4375 280.8656,404.3125 Q280.8656,401.1875 282.1781,399.5313 Q283.5063,397.875 286.0063,397.875 Q286.7094,397.875 287.35,398.0313 Q288.0063,398.1875 288.5688,398.4844 L288.5688,401.2031 Q287.9438,400.625 287.35,400.3594 Q286.7563,400.0781 286.1313,400.0781 Q284.7875,400.0781 284.1,401.1563 Q283.4125,402.2188 283.4125,404.3125 Q283.4125,406.4063 284.1,407.4844 Q284.7875,408.5469 286.1313,408.5469 Q286.7563,408.5469 287.35,408.2813 Q287.9438,408 288.5688,407.4219 L288.5688,410.1406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="300.4" y="408.6543">HdiLoader</text><line style="stroke:#A80036;stroke-width:1.5;" x1="268" x2="369" y1="420.5" y2="420.5"/><line style="stroke:#A80036;stroke-width:1.5;" x1="268" x2="369" y1="428.5" y2="428.5"/><ellipse cx="278" cy="439.5" fill="#84BE84" rx="3" ry="3" style="stroke:#038048;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="77" x="287" y="442.7104">LoadHdiImpl()</text><!--MD5=[47eceadc436a5175bf90f3cf8fc075e1]
reverse link RefBase to HdiBase--><path codeline="22" d="M218.5,60.13 C218.5,77.15 218.5,98.6 218.5,114.68 " fill="none" id="RefBase-backto-HdiBase" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="218.5,55,214.5,64,218.5,60,222.5,64,218.5,55" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[a19457632ee0d013a549908270ea450a]
reverse link HdiBase to IFoo--><path codeline="23" d="M218.5,168.42 C218.5,184.33 218.5,204.59 218.5,222.93 " fill="none" id="HdiBase-backto-IFoo" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="218.5,163.21,214.5,172.21,218.5,168.21,222.5,172.21,218.5,163.21" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[2927f5cdd9f4afb420e871007ac4508c]
reverse link IFoo to FooService--><path codeline="24" d="M173.66,338.95 C163.59,353.65 153.26,368.73 144.36,381.72 " fill="none" id="IFoo-backto-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="168.18,334.56,185.26,322.02,179.73,342.47,168.18,334.56" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[9b2160684f9eb8c2132d894af5d1009b]
link IFoo to HdiLoader--><path codeline="25" d="M252.08,322.02 C267.28,343.99 284.77,369.26 297.98,388.35 " fill="none" id="IFoo-HdiLoader" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[e01fb25c8c7bf3a3e299fcc42f5df6ab]
@startuml
!theme vibrant
    class HdiBase {
    }
    class RefBase {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }

    class FooService {
        + {static} ISample *SampleImplGetInstance()
        + Foo()
    }

    class HdiLoader {
        + LoadHdiImpl()
    }

    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <|- -  FooService
    IFoo - -  HdiLoader
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
    class HdiBase {
    }
    class RefBase {
    }
    interface IFoo {
        + {static} Get(bool isStub)
        + {static} Get(servName, isStub)
        + {static} GetDescriptor()
        + {abstract} Foo()
    }

    class FooService {
        + {static} ISample *SampleImplGetInstance()
        + Foo()
    }

    class HdiLoader {
        + LoadHdiImpl()
    }

    RefBase <- - HdiBase
    HdiBase <- - IFoo
    IFoo <|- -  FooService
    IFoo - -  HdiLoader
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x4E3B;&#x8981;&#x6D41;&#x7A0B;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="422px" preserveAspectRatio="none" style="width:696px;height:422px;background:#FFFFFF;" version="1.1" viewBox="0 0 696 422" width="696px" zoomAndPan="magnify"><defs><filter height="300%" id="frt3rxkhghd95" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="26" x2="26" y1="88.2969" y2="338.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="167.5" x2="167.5" y1="88.2969" y2="338.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="413.5" x2="413.5" y1="88.2969" y2="338.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="639" x2="639" y1="88.2969" y2="338.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="84.9951">Actor</text><ellipse cx="26" cy="15" fill="#FEFECE" filter="url(#frt3rxkhghd95)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,23 L26,50 M13,31 L39,31 M26,50 L13,65 M26,50 L39,65 " fill="none" filter="url(#frt3rxkhghd95)" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="36" x="5" y="350.2217">Actor</text><ellipse cx="26" cy="363.5234" fill="#FEFECE" filter="url(#frt3rxkhghd95)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M26,371.5234 L26,398.5234 M13,379.5234 L39,379.5234 M26,398.5234 L13,413.5234 M26,398.5234 L39,413.5234 " fill="none" filter="url(#frt3rxkhghd95)" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="43" x="144.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="151.5" y="72.9951">IFoo</text><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="43" x="144.5" y="337.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29" x="151.5" y="357.2217">IFoo</text><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="370.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="377.5" y="72.9951">HdiLoader</text><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="370.5" y="337.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="377.5" y="357.2217">HdiLoader</text><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="592" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="599" y="72.9951">FooService</text><rect fill="#FEFECE" filter="url(#frt3rxkhghd95)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="592" y="337.2266"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="599" y="357.2217">FooService</text><polygon fill="#A80036" points="156,115.4297,166,119.4297,156,123.4297,160,119.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="162" y1="119.4297" y2="119.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="33" y="114.3638">Get(isStub = true)</text><polygon fill="#A80036" points="402,144.5625,412,148.5625,402,152.5625,406,148.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="168" x2="408" y1="148.5625" y2="148.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="222" x="175" y="143.4966">LoadHdiImpl(IFoo::GetDescriptor())</text><line style="stroke:#A80036;stroke-width:1.0;" x1="414" x2="456" y1="177.6953" y2="177.6953"/><line style="stroke:#A80036;stroke-width:1.0;" x1="456" x2="456" y1="177.6953" y2="190.6953"/><line style="stroke:#A80036;stroke-width:1.0;" x1="415" x2="456" y1="190.6953" y2="190.6953"/><polygon fill="#A80036" points="425,186.6953,415,190.6953,425,194.6953,421,190.6953" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="421" y="172.6294">dlopen(&quot;libsample_stub_1.0&quot;)</text><line style="stroke:#A80036;stroke-width:1.0;" x1="414" x2="456" y1="219.8281" y2="219.8281"/><line style="stroke:#A80036;stroke-width:1.0;" x1="456" x2="456" y1="219.8281" y2="232.8281"/><line style="stroke:#A80036;stroke-width:1.0;" x1="415" x2="456" y1="232.8281" y2="232.8281"/><polygon fill="#A80036" points="425,228.8281,415,232.8281,425,236.8281,421,232.8281" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="211" x="421" y="214.7622">dlsym(&quot;SampleImplGetInstance&quot;)</text><polygon fill="#A80036" points="627,257.9609,637,261.9609,627,265.9609,631,261.9609" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="414" x2="633" y1="261.9609" y2="261.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="421" y="256.895">new</text><polygon fill="#A80036" points="37,287.0938,27,291.0938,37,295.0938,33,291.0938" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:2.0,2.0;" x1="31" x2="413" y1="291.0938" y2="291.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="175" x="43" y="286.0278">FooService *fooServiceImpl</text><polygon fill="#A80036" points="627,316.2266,637,320.2266,627,324.2266,631,320.2266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="26" x2="633" y1="320.2266" y2="320.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="53" x="33" y="315.1606">FuncCall</text><!--MD5=[c067fa130cef3d4a4a602abc767b7f4e]
@startuml
actor       Actor       as actor
actor -> IFoo : Get(isStub = true)
IFoo -> HdiLoader : LoadHdiImpl(IFoo::GetDescriptor())
HdiLoader -> HdiLoader : dlopen("libsample_stub_1.0")
HdiLoader -> HdiLoader : dlsym("SampleImplGetInstance")
HdiLoader -> FooService : new
HdiLoader - -> actor : FooService *fooServiceImpl
actor -> FooService : FuncCall
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x751F;&#x6210;&#x4EE3;&#x7801;&#x4E2D;&#x5B9E;&#x73B0;<code>IFoo::Get(servName, isStub)</code>&#x9759;&#x6001;&#x65B9;&#x6CD5;&#xFF0C;&#x8C03;&#x7528;<code>HdiLoader</code>&#x83B7;&#x53D6;<code>sptr&lt;FooService&gt;</code>&#x5B9E;&#x4F8B;&#xFF0C;&#x8FD4;&#x56DE;</p>
<h1 class="mume-header" id="c%E8%AF%AD%E8%A8%80%E6%96%B9%E6%A1%88">C&#x8BED;&#x8A00;&#x65B9;&#x6848;</h1>

<p>C&#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#x7684;&#x76EE;&#x6807;&#x4ECD;&#x7136;&#x662F;&#x5C06;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x5B8C;&#x5168;&#x4E0E;&#x89E3;&#x8026;&#xFF0C;&#x6D88;&#x9664;Service&#x5B9E;&#x73B0;&#x5BF9;&#x4E8E;Stub&#x5BF9;&#x8C61;&#x7684;&#x4F9D;&#x8D56;&#xFF0C;&#x5B9E;&#x73B0;&#x7EAF;&#x63A5;&#x53E3;&#x7C7B;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#x5728;&#x4F20;&#x8F93;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x65F6;&#x9700;&#x8981;&#x89E3;&#x51B3;&#x5982;&#x4F55;&#x4ECE;Service&#x5BF9;&#x8C61;&#x627E;&#x5230;Stub&#x5BF9;&#x8C61;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6240;&#x4EE5;&#x4E0E;C++&#x5B9E;&#x73B0;&#x7C7B;&#x4F3C;&#xFF1A;</p>
<ol>
<li>&#x5B9E;&#x73B0;Stub&#x5BF9;&#x8C61;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x4E0E;&#x63A5;&#x53E3;&#x7684;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;map&#x8868;&#xFF0C;&#x7528;&#x4E8E;&#x6839;&#x636E;Service&#x5BF9;&#x8C61;&#x52A8;&#x6001;&#x521B;&#x5EFA;Stub&#x5BF9;&#x8C61;</li>
<li>&#x5B9E;&#x73B0;Service&#x5BF9;&#x8C61;&#x4E0E;Stub&#x5BF9;&#x8C61;&#x7684;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;map&#x8868;&#xFF0C;&#x7528;&#x4E8E;&#x6839;&#x636E;&#x5DF2;&#x6709;Service&#x5BF9;&#x8C61;&#x83B7;&#x53D6;&#x5BF9;&#x5E94;&#x7684;Stub&#x5BF9;&#x8C61;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#xFF0C;&#x5219;&#x901A;&#x8FC7;&#x4E0A;&#x9762;map&#x8868;&#x67E5;&#x627E;&#x6784;&#x9020;&#x51FD;&#x6570;&#x65B0;&#x6784;&#x9020;stub&#x5BF9;&#x8C61;</li>
</ol>
<p><strong>&#x56F0;&#x96BE;&#x70B9;&#xFF1A;</strong><br>
&#x5982;&#x4F55;&#x7BA1;&#x7406;stub&#x5BF9;&#x8C61;&#xFF0C;&#x5BF9;&#x4E8E;&#x4E34;&#x65F6;&#x4EA7;&#x751F;&#x7684;&#x53EF;&#x80FD;&#x77ED;&#x751F;&#x547D;&#x5468;&#x671F;&#x7684;stub&#x5BF9;&#x8C61;&#xFF0C;&#x6CA1;&#x6709;&#x667A;&#x80FD;&#x6307;&#x9488;&#xFF0C;&#x5982;&#x4F55;&#x81EA;&#x52A8;&#x91CA;&#x653E;&#xFF1F;&#x53C8;&#x5982;&#x4F55;&#x5728;stub&#x5BF9;&#x8C61;&#x91CA;&#x653E;&#x65F6;&#x6D88;&#x9664;&#x4E0E;service&#x5BF9;&#x8C61;&#x5728;collector&#x4E2D;&#x7684;&#x5173;&#x8054;&#xFF1F; &#x5168;&#x624B;&#x52A8;&#xFF1F;</p>
<h2 class="mume-header" id="%E6%9C%8D%E5%8A%A1%E7%AB%AF-1">&#x670D;&#x52A1;&#x7AEF;</h2>

<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="170px" preserveAspectRatio="none" style="width:355px;height:170px;background:#FFFFFF;" version="1.1" viewBox="0 0 355 170" width="355px" zoomAndPan="magnify"><defs/><g><!--MD5=[a0cefb177548c32178beb57e62fa1a8c]
class IFoo--><rect codeline="2" fill="#FEFECE" height="48" id="IFoo" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="59" x="27.5" y="7"/><ellipse cx="42.5" cy="23" fill="#B4A7E5" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M38.4219,18.7656 L38.4219,16.6094 L45.8125,16.6094 L45.8125,18.7656 L43.3438,18.7656 L43.3438,26.8438 L45.8125,26.8438 L45.8125,29 L38.4219,29 L38.4219,26.8438 L40.8906,26.8438 L40.8906,18.7656 L38.4219,18.7656 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacing" textLength="27" x="56.5" y="27.1543">IFoo</text><line style="stroke:#A80036;stroke-width:1.5;" x1="28.5" x2="85.5" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="28.5" x2="85.5" y1="47" y2="47"/><!--MD5=[439980ff4e316fcea7eb434b1c1f4104]
class FooService--><rect codeline="5" fill="#FEFECE" height="48" id="FooService" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="100" x="7" y="115"/><ellipse cx="22" cy="131" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M24.9688,136.6406 Q24.3906,136.9375 23.75,137.0781 Q23.1094,137.2344 22.4063,137.2344 Q19.9063,137.2344 18.5781,135.5938 Q17.2656,133.9375 17.2656,130.8125 Q17.2656,127.6875 18.5781,126.0313 Q19.9063,124.375 22.4063,124.375 Q23.1094,124.375 23.75,124.5313 Q24.4063,124.6875 24.9688,124.9844 L24.9688,127.7031 Q24.3438,127.125 23.75,126.8594 Q23.1563,126.5781 22.5313,126.5781 Q21.1875,126.5781 20.5,127.6563 Q19.8125,128.7188 19.8125,130.8125 Q19.8125,132.9063 20.5,133.9844 Q21.1875,135.0469 22.5313,135.0469 Q23.1563,135.0469 23.75,134.7813 Q24.3438,134.5 24.9688,133.9219 L24.9688,136.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="68" x="36" y="135.1543">FooService</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="106" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="106" y1="155" y2="155"/><!--MD5=[dd82cabe89ad165c6fa0c3e43ad78fa1]
class FooStub--><rect codeline="8" fill="#FEFECE" height="48" id="FooStub" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="84" x="134" y="7"/><ellipse cx="149" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M151.9688,28.6406 Q151.3906,28.9375 150.75,29.0781 Q150.1094,29.2344 149.4063,29.2344 Q146.9063,29.2344 145.5781,27.5938 Q144.2656,25.9375 144.2656,22.8125 Q144.2656,19.6875 145.5781,18.0313 Q146.9063,16.375 149.4063,16.375 Q150.1094,16.375 150.75,16.5313 Q151.4063,16.6875 151.9688,16.9844 L151.9688,19.7031 Q151.3438,19.125 150.75,18.8594 Q150.1563,18.5781 149.5313,18.5781 Q148.1875,18.5781 147.5,19.6563 Q146.8125,20.7188 146.8125,22.8125 Q146.8125,24.9063 147.5,25.9844 Q148.1875,27.0469 149.5313,27.0469 Q150.1563,27.0469 150.75,26.7813 Q151.3438,26.5 151.9688,25.9219 L151.9688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="52" x="163" y="27.1543">FooStub</text><line style="stroke:#A80036;stroke-width:1.5;" x1="135" x2="217" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="135" x2="217" y1="47" y2="47"/><!--MD5=[ebfce64199542a9c45eae0853c3cc247]
class FooDriver--><rect codeline="11" fill="#FEFECE" height="48" id="FooDriver" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="91" x="142.5" y="115"/><ellipse cx="157.5" cy="131" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M160.4688,136.6406 Q159.8906,136.9375 159.25,137.0781 Q158.6094,137.2344 157.9063,137.2344 Q155.4063,137.2344 154.0781,135.5938 Q152.7656,133.9375 152.7656,130.8125 Q152.7656,127.6875 154.0781,126.0313 Q155.4063,124.375 157.9063,124.375 Q158.6094,124.375 159.25,124.5313 Q159.9063,124.6875 160.4688,124.9844 L160.4688,127.7031 Q159.8438,127.125 159.25,126.8594 Q158.6563,126.5781 158.0313,126.5781 Q156.6875,126.5781 156,127.6563 Q155.3125,128.7188 155.3125,130.8125 Q155.3125,132.9063 156,133.9844 Q156.6875,135.0469 158.0313,135.0469 Q158.6563,135.0469 159.25,134.7813 Q159.8438,134.5 160.4688,133.9219 L160.4688,136.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="59" x="171.5" y="135.1543">FooDriver</text><line style="stroke:#A80036;stroke-width:1.5;" x1="143.5" x2="232.5" y1="147" y2="147"/><line style="stroke:#A80036;stroke-width:1.5;" x1="143.5" x2="232.5" y1="155" y2="155"/><!--MD5=[c1e79708e4c860e7445cc22a3456fc7f]
class HdiLoader--><rect codeline="14" fill="#FEFECE" height="48" id="HdiLoader" rx="3.5" ry="3.5" style="stroke:#A80036;stroke-width:1.5;" width="95" x="253.5" y="7"/><ellipse cx="268.5" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M271.4688,28.6406 Q270.8906,28.9375 270.25,29.0781 Q269.6094,29.2344 268.9063,29.2344 Q266.4063,29.2344 265.0781,27.5938 Q263.7656,25.9375 263.7656,22.8125 Q263.7656,19.6875 265.0781,18.0313 Q266.4063,16.375 268.9063,16.375 Q269.6094,16.375 270.25,16.5313 Q270.9063,16.6875 271.4688,16.9844 L271.4688,19.7031 Q270.8438,19.125 270.25,18.8594 Q269.6563,18.5781 269.0313,18.5781 Q267.6875,18.5781 267,19.6563 Q266.3125,20.7188 266.3125,22.8125 Q266.3125,24.9063 267,25.9844 Q267.6875,27.0469 269.0313,27.0469 Q269.6563,27.0469 270.25,26.7813 Q270.8438,26.5 271.4688,25.9219 L271.4688,28.6406 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="63" x="282.5" y="27.1543">HdiLoader</text><line style="stroke:#A80036;stroke-width:1.5;" x1="254.5" x2="347.5" y1="39" y2="39"/><line style="stroke:#A80036;stroke-width:1.5;" x1="254.5" x2="347.5" y1="47" y2="47"/><!--MD5=[4fbc3273552d0d6d9f305bf8694cf9aa]
link FooStub to FooDriver--><path codeline="18" d="M178.6,55 C180.6,72.66 183.35,96.94 185.36,114.68 " fill="none" id="FooStub-FooDriver" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[2927f5cdd9f4afb420e871007ac4508c]
reverse link IFoo to FooService--><path codeline="20" d="M57,75.02 C57,88.58 57,103.04 57,114.68 " fill="none" id="IFoo-backto-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="none" points="50,75,57,55,64,75,50,75" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[da5255adef7008f710f2a56746025c40]
link FooStub to FooService--><path codeline="21" d="M150.18,55 C131.59,71.55 106.47,93.93 87,111.28 " fill="none" id="FooStub-to-FooService" style="stroke:#454645;stroke-width:1.0;"/><polygon fill="#454645" points="83.18,114.68,92.5577,111.6703,86.9099,111.3502,87.2301,105.7024,83.18,114.68" style="stroke:#454645;stroke-width:1.0;"/><!--MD5=[2fcd53d0f25bf35ce65e9d341023ab6a]
@startuml
!theme vibrant
Interface IFoo {
}

class FooService {
}

class FooStub {
}

class FooDriver {
}

class HdiLoader {

}

FooStub - - FooDriver

IFoo <|- - FooService
FooStub - -> FooService
@enduml

@startuml
skinparam BackgroundColor FFFFFF
skinparam shadowing false
skinparam RoundCorner 7
skinparam ArrowColor 454645
skinparam FontColor 454645
skinparam SequenceLifeLineBorderColor 696969
skinparam SequenceGroupHeaderFontColor 454645
skinparam SequenceGroupFontColor 696969
skinparam SequenceGroupBorderColor 696969
skinparam SequenceGroupBorderThickness 1

skinparam sequenceDivider {
    BorderColor 454645
    BorderThickness 1
    FontColor 454645
}

skinparam participant {
    BackgroundColor FF6347
    BorderColor FF6F61
    FontColor FFFFFF
}

skinparam database {
    BackgroundColor 00FFFF
    BorderColor 454645
    FontColor 454645
}

skinparam entity {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam note {
    BackgroundColor 7FFFD4
    BorderColor 7FFFD4
    FontColor 454645
}

skinparam actor {
    BackgroundColor 454645
    BorderColor 454645
    FontColor 454645
}

skinparam boundary {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam control {
    BackgroundColor FFE552
    BorderColor 454645
    FontColor 454645
}

skinparam collections {
    BackgroundColor FF6347
    BorderColor FFFFFF
    FontColor 454645
}

skinparam queue {
    BackgroundColor FF6347
    BorderColor FFF
    FontColor FFF
    BorderThickness 1.5
}
Interface IFoo {
}

class FooService {
}

class FooStub {
}

class FooDriver {
}

class HdiLoader {

}

FooStub - - FooDriver

IFoo <|- - FooService
FooStub - -> FooService
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x521D;&#x59CB;&#x5316;&#x6D41;&#x7A0B;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="552px" preserveAspectRatio="none" style="width:939px;height:552px;background:#FFFFFF;" version="1.1" viewBox="0 0 939 552" width="939px" zoomAndPan="magnify"><defs><filter height="300%" id="fvsxww1ltrs9r" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="37" x2="37" y1="88.2969" y2="467.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="173" x2="173" y1="88.2969" y2="467.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="353.5" x2="353.5" y1="88.2969" y2="467.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="580" x2="580" y1="88.2969" y2="467.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="682.5" x2="682.5" y1="88.2969" y2="467.7578"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="882" x2="882" y1="88.2969" y2="467.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="5" y="84.9951">Devhost</text><ellipse cx="37" cy="15" fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M37,23 L37,50 M24,31 L50,31 M37,50 L24,65 M37,50 L50,65 " fill="none" filter="url(#fvsxww1ltrs9r)" style="stroke:#A80036;stroke-width:2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="5" y="479.7529">Devhost</text><ellipse cx="37" cy="493.0547" fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" rx="8" ry="8" style="stroke:#A80036;stroke-width:2.0;"/><path d="M37,501.0547 L37,528.0547 M24,509.0547 L50,509.0547 M37,528.0547 L24,543.0547 M37,528.0547 L50,543.0547 " fill="none" filter="url(#fvsxww1ltrs9r)" style="stroke:#A80036;stroke-width:2.0;"/><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="135" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="142" y="72.9951">FooStub</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="135" y="466.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="142" y="486.7529">FooStub</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="107" x="298.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93" x="305.5" y="72.9951">StubCollector</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="107" x="298.5" y="466.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93" x="305.5" y="486.7529">StubCollector</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="80" x="538" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="66" x="545" y="72.9951">FooDriver</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="80" x="538" y="466.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="66" x="545" y="486.7529">FooDriver</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="639.5" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="646.5" y="72.9951">HdiLoader</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="83" x="639.5" y="466.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69" x="646.5" y="486.7529">HdiLoader</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="835" y="53"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="842" y="72.9951">FooService</text><rect fill="#FEFECE" filter="url(#fvsxww1ltrs9r)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="835" y="466.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="842" y="486.7529">FooService</text><polygon fill="#A80036" points="161,115.4297,171,119.4297,161,123.4297,165,119.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="37" x2="167" y1="119.4297" y2="119.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="112" x="44" y="114.3638">static constructor</text><polygon fill="#A80036" points="342,144.5625,352,148.5625,342,152.5625,346,148.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="173" x2="348" y1="148.5625" y2="148.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="180" y="143.4966">StubConstructorRegister</text><polygon fill="#A80036" points="568,173.6953,578,177.6953,568,181.6953,572,177.6953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="37" x2="574" y1="177.6953" y2="177.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="28" x="44" y="172.6294">Bind</text><polygon fill="#A80036" points="671,202.8281,681,206.8281,671,210.8281,675,206.8281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="580" x2="677" y1="206.8281" y2="206.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="79" x="587" y="201.7622">LoadHdiImpl</text><line style="stroke:#A80036;stroke-width:1.0;" x1="683" x2="725" y1="235.9609" y2="235.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="725" x2="725" y1="235.9609" y2="248.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="684" x2="725" y1="248.9609" y2="248.9609"/><polygon fill="#A80036" points="694,244.9609,684,248.9609,694,252.9609,690,248.9609" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="176" x="690" y="230.895">dlopen(&quot;libfoo_service_1.0&quot;)</text><line style="stroke:#A80036;stroke-width:1.0;" x1="683" x2="725" y1="278.0938" y2="278.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="725" x2="725" y1="278.0938" y2="291.0938"/><line style="stroke:#A80036;stroke-width:1.0;" x1="684" x2="725" y1="291.0938" y2="291.0938"/><polygon fill="#A80036" points="694,287.0938,684,291.0938,694,295.0938,690,291.0938" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="185" x="690" y="273.0278">dlsym(&quot;FooImplGetInstance&quot;)</text><polygon fill="#A80036" points="870,316.2266,880,320.2266,870,324.2266,874,320.2266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="683" x2="876" y1="320.2266" y2="320.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="690" y="315.1606">new</text><polygon fill="#A80036" points="365,345.3594,355,349.3594,365,353.3594,361,349.3594" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="359" x2="579" y1="349.3594" y2="349.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="202" x="371" y="344.2935">StubCollectorGetOrNewObject()</text><line style="stroke:#A80036;stroke-width:1.0;" x1="354" x2="396" y1="378.4922" y2="378.4922"/><line style="stroke:#A80036;stroke-width:1.0;" x1="396" x2="396" y1="378.4922" y2="391.4922"/><line style="stroke:#A80036;stroke-width:1.0;" x1="355" x2="396" y1="391.4922" y2="391.4922"/><polygon fill="#A80036" points="365,387.4922,355,391.4922,365,395.4922,361,391.4922" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="361" y="373.4263">FindConstructor</text><polygon fill="#A80036" points="184,416.625,174,420.625,184,424.625,180,420.625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="178" x2="353" y1="420.625" y2="420.625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="190" y="415.5591">new</text><polygon fill="#A80036" points="568,445.7578,578,449.7578,568,453.7578,572,449.7578" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="354" x2="574" y1="449.7578" y2="449.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="71" x="361" y="444.6919">StubObject</text><!--MD5=[482ed996644b0ee16b6d90f155331413]
@startuml
actor       Devhost       as Devhost
Devhost -> FooStub : static constructor
FooStub -> StubCollector : StubConstructorRegister
Devhost -> FooDriver : Bind
FooDriver -> HdiLoader : LoadHdiImpl
HdiLoader -> HdiLoader : dlopen("libfoo_service_1.0")
HdiLoader -> HdiLoader : dlsym("FooImplGetInstance")
HdiLoader -> FooService : new
FooDriver -> StubCollector : StubCollectorGetOrNewObject()
StubCollector -> StubCollector : FindConstructor
StubCollector -> FooStub : new
StubCollector -> FooDriver : StubObject
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x4F5C;&#x4E3A;&#x53C2;&#x6570;&#x7684;&#x60C5;&#x51B5;</p>
<p><!--?xml version="1.0" encoding="UTF-8" standalone="no"?--><svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" contentscripttype="application/ecmascript" contentstyletype="text/css" height="565px" preserveAspectRatio="none" style="width:761px;height:565px;background:#FFFFFF;" version="1.1" viewBox="0 0 761 565" width="761px" zoomAndPan="magnify"><defs><filter height="300%" id="fyt1cl93apdpp" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FFFFFF" filter="url(#fyt1cl93apdpp)" height="231.1953" style="stroke:#000000;stroke-width:2.0;" width="737.5" x="10" y="274.2266"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="124" x2="124" y1="40.2969" y2="522.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="254" x2="254" y1="40.2969" y2="522.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="356" x2="356" y1="40.2969" y2="522.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="479.5" x2="479.5" y1="40.2969" y2="522.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="618.5" x2="618.5" y1="40.2969" y2="522.4219"/><line style="stroke:#A80036;stroke-width:1.0;stroke-dasharray:5.0,5.0;" x1="701.5" x2="701.5" y1="40.2969" y2="522.4219"/><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="86" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="93" y="24.9951">FooStub</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="72" x="86" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="58" x="93" y="541.417">FooStub</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="207" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="214" y="24.9951">FooService</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="90" x="207" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="76" x="214" y="541.417">FooService</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="87" x="311" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="318" y="24.9951">BarService</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="87" x="311" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="73" x="318" y="541.417">BarService</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="107" x="424.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93" x="431.5" y="24.9951">StubCollector</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="107" x="424.5" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93" x="431.5" y="541.417">StubCollector</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="69" x="582.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="589.5" y="24.9951">BarStub</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="69" x="582.5" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="55" x="589.5" y="541.417">BarStub</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="68" x="665.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="672.5" y="24.9951">HdfSbuf</text><rect fill="#FEFECE" filter="url(#fyt1cl93apdpp)" height="30.2969" style="stroke:#A80036;stroke-width:1.5;" width="68" x="665.5" y="521.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="54" x="672.5" y="541.417">HdfSbuf</text><polygon fill="#A80036" points="242,67.4297,252,71.4297,242,75.4297,246,71.4297" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="124" x2="248" y1="71.4297" y2="71.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="79" x="131" y="66.3638">GetInterface</text><polygon fill="#A80036" points="344.5,96.5625,354.5,100.5625,344.5,104.5625,348.5,100.5625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="254" x2="350.5" y1="100.5625" y2="100.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="27" x="261" y="95.4966">New</text><polygon fill="#A80036" points="135,125.6953,125,129.6953,135,133.6953,131,129.6953" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="129" x2="253" y1="129.6953" y2="129.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="69" x="141" y="124.6294">BarService</text><polygon fill="#A80036" points="468,154.8281,478,158.8281,468,162.8281,472,158.8281" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="254" x2="474" y1="158.8281" y2="158.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="202" x="261" y="153.7622">StubCollectorGetOrNewObject()</text><line style="stroke:#A80036;stroke-width:1.0;" x1="480" x2="522" y1="187.9609" y2="187.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="522" x2="522" y1="187.9609" y2="200.9609"/><line style="stroke:#A80036;stroke-width:1.0;" x1="481" x2="522" y1="200.9609" y2="200.9609"/><polygon fill="#A80036" points="491,196.9609,481,200.9609,491,204.9609,487,200.9609" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="487" y="182.895">FindConstructor</text><polygon fill="#A80036" points="607,226.0938,617,230.0938,607,234.0938,611,230.0938" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="480" x2="613" y1="230.0938" y2="230.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="25" x="487" y="225.0278">new</text><polygon fill="#A80036" points="689.5,255.2266,699.5,259.2266,689.5,263.2266,693.5,259.2266" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="124" x2="695.5" y1="259.2266" y2="259.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="123" x="131" y="254.1606">WriteRemoteObject</text><path d="M10,274.2266 L74,274.2266 L74,281.2266 L64,291.2266 L10,291.2266 L10,274.2266 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.0;"/><rect fill="none" height="231.1953" style="stroke:#000000;stroke-width:2.0;" width="737.5" x="10" y="274.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="25" y="287.2935">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="164" x="89" y="286.437">[release interface object]</text><polygon fill="#A80036" points="689.5,308.4922,699.5,312.4922,689.5,316.4922,693.5,312.4922" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="124" x2="695.5" y1="312.4922" y2="312.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="123" x="131" y="307.4263">ReadRemoteObject</text><polygon fill="#A80036" points="242,337.625,252,341.625,242,345.625,246,341.625" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="124" x2="248" y1="341.625" y2="341.625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="106" x="131" y="336.5591">ReleaseInterface</text><polygon fill="#FF0000" points="344.5,366.7578,354.5,370.7578,344.5,374.7578,348.5,370.7578" style="stroke:#FF0000;stroke-width:1.0;"/><line style="stroke:#FF0000;stroke-width:1.0;" x1="254" x2="350.5" y1="370.7578" y2="370.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50" x="261" y="365.6919">Release</text><polygon fill="#A80036" points="468,423.5898,478,427.5898,468,431.5898,472,427.5898" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="254" x2="474" y1="427.5898" y2="427.5898"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="179" x="261" y="422.5239">StubCollectorRemoveObject</text><path d="M20,383.7578 L20,453.7578 L245,453.7578 L245,393.7578 L235,383.7578 L20,383.7578 " fill="#FBFB77" filter="url(#fyt1cl93apdpp)" style="stroke:#A80036;stroke-width:1.0;"/><path d="M235,383.7578 L235,393.7578 L245,393.7578 L235,383.7578 " fill="#FBFB77" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="190" x="26" y="400.8247">How to release stub object &#xFF1F;&#xFF1F;</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="176" x="26" y="415.9575">Manually release objects by</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="204" x="26" y="431.0903">call StubCollectorRemoveObject</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="141" x="30" y="446.2231">in service implement&#xFF1F;</text><line style="stroke:#A80036;stroke-width:1.0;" x1="480" x2="522" y1="484.4219" y2="484.4219"/><line style="stroke:#A80036;stroke-width:1.0;" x1="522" x2="522" y1="484.4219" y2="497.4219"/><line style="stroke:#A80036;stroke-width:1.0;" x1="481" x2="522" y1="497.4219" y2="497.4219"/><polygon fill="#A80036" points="491,493.4219,481,497.4219,491,501.4219,487,497.4219" style="stroke:#A80036;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="125" x="487" y="479.356">destructor(stubObj)</text><!--MD5=[c298a61d45bdadb63dbefa76ae3a9906]
@startuml
FooStub -> FooService : GetInterface
FooService -> BarService : New
FooService -> FooStub : BarService
FooService -> StubCollector : StubCollectorGetOrNewObject()
StubCollector -> StubCollector : FindConstructor
StubCollector -> BarStub : new
FooStub -> HdfSbuf : WriteRemoteObject

alt release interface object
FooStub -> HdfSbuf : ReadRemoteObject
FooStub -> FooService : ReleaseInterface
FooService -[#red]> BarService : Release

FooService -> StubCollector : StubCollectorRemoveObject
note left
How to release stub object ？？
Manually release objects by
call StubCollectorRemoveObject
 in service implement？
end note

StubCollector -> StubCollector : destructor(stubObj)

end
@enduml

PlantUML version 1.2021.12(Wed Oct 06 00:01:58 CST 2021)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg></p><p>&#x6846;&#x67B6;&#x53EF;&#x4EE5;&#x8D1F;&#x8D23;&#x4E3A;Service&#x5BF9;&#x8C61;&#x52A8;&#x6001;&#x751F;&#x6210;stub&#x5BF9;&#x8C61;&#xFF0C;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x4E0D;&#x53EF;&#x611F;&#x77E5;service&#x5BF9;&#x8C61;&#x7684;&#x58F0;&#x660E;&#x5468;&#x671F;&#xFF0C;&#x4E0D;&#x80FD;&#x540C;&#x6B65;&#x91CA;&#x653E;stub&#x5BF9;&#x8C61;&#xFF0C;&#x81EA;&#x52A8;&#x91CA;&#x653E;&#x5B58;&#x5728;&#x56F0;&#x96BE;&#xFF0C;&#x53EA;&#x80FD;&#x7531;service&#x5B9E;&#x73B0;&#x5728;&#x91CA;&#x653E;&#x52A8;&#x6001;&#x751F;&#x6210;&#x7684;&#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x65F6;&#x8C03;&#x7528;&#x6846;&#x67B6;&#x63A5;&#x53E3;&#x540C;&#x6B65;&#x91CA;&#x653E;stub&#x5BF9;&#x8C61;&#xFF0C;&#x4F46;&#x662F;&#x8FD9;&#x6837;&#x4E5F;&#x5F15;&#x5165;&#x4E86;&#x4E0D;&#x80FD;&#x5728;passthrough&#x4E0B;&#x517C;&#x5BB9;&#x7684;&#x4EE3;&#x7801;&#xFF0C;C&#x8BED;&#x8A00;&#x65B9;&#x6848;&#x53EA;&#x80FD;&#x505A;&#x4E00;&#x4E9B;&#x59A5;&#x534F;&#xFF0C;&#x4E5F;&#x662F;&#x5F15;&#x5BFC;&#x5927;&#x5BB6;&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528;C++&#x5B9E;&#x73B0;&#x7684;&#x51FA;&#x53D1;&#x70B9;&#x4E4B;&#x4E00;&#x3002;</p>

      </div>
      
      
    
    
    
    
    
    
    
    
  
    </body></html>